0

J'ai une liste avec barres d'évaluation. Initialement, la note est nulle pour tous. Lorsque je donne une note à une barre de notation, la note sélectionnée est téléchargée sur le serveur et une fois téléchargée, j'appelle le notifyDataSetChanged() pour que le listview soit mis à jour avec les dernières valeurs. Mais ce n'est pas en réglant la barre d'évaluation avec la valeur téléchargée sur le serveur à la place, il affiche la cote zéro comme avant. Quand je vais à l'autre page et que je reviens, la note est maintenant correctement définie. Est-ce que je fais quelque chose de mal dans mon getView()?La barre d'évaluation n'est pas définie lorsque notifyDataSetChanged est appelée

public class OrderAdapter extends ArrayAdapter<OrderModel> { 

private Context mContext; 
int resource; 
private ArrayList<OrderModel> mListData = new ArrayList<OrderModel>(); 
private String userid, prdid; 
SharedPreferences sharedpreferences; 


public OrderAdapter(Context mContext, int resource, ArrayList<OrderModel> mListData) { 
    super(mContext, resource, mListData); 
    this.resource = resource; 
    this.mContext = mContext; 
    this.mListData = mListData; 
    sharedpreferences = mContext.getSharedPreferences("MyPREFERENCES", Context.MODE_PRIVATE); 

} 

@Override 
public int getCount() { 
    return super.getCount(); 
} 

@Override 
public View getView(final int position, View convertView, final ViewGroup parent) { 
    View v = convertView; 
    final ViewHolder holder; 
    if (v == null) { 
     holder = new ViewHolder(); 

     LayoutInflater inflater = ((Activity) mContext).getLayoutInflater(); 

     v = inflater.inflate(resource, parent, false); 


     holder.rate = (RatingBar)v.findViewById(rate); 



     v.setTag(holder); 
    } else { 
     holder = (ViewHolder) v.getTag(); 
    } 



    holder.rate.setRating(Float.parseFloat(item.getRate())); 
    if(holder.rate.getRating()>0) { 
     holder.rate.setIsIndicator(true); 
    }else{ 
     holder.rate.setIsIndicator(false); 
    } 


    holder.rate.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 
     @Override 
     public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { 
      uploadrating(String.valueOf(rating), position, ratingBar); 
     } 
    }); 

    return v; 
} 



class ViewHolder { 

    ImageView image; 
    TextView titletxt, ordereddttxt, delvrdttxt, ordernotxt, statustxt; 
    RatingBar rate; 
} 

private void uploadrating(final String rating, final int position, final RatingBar rate){ 

    userid=sharedpreferences.getString("userid",""); 
    prdid = mListData.get(position).getPrdid(); 

    StringRequest stringRequest = new StringRequest(Request.Method.POST, URLUtil.UPLOADRATING, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 


        try { 
         JSONObject obj = new JSONObject(response); 
         if(obj.getInt("Ack")==1){ 
          Toast.makeText(mContext, obj.getString("msg"), Toast.LENGTH_SHORT).show(); 
          rate.setIsIndicator(true); 
          notifyDataSetChanged(); 
         } 

        } catch (JSONException e) { 
         e.printStackTrace(); 

        } 
       } 
      }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 

     } 
    }) { 
     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<String, String>(); 

      params.put("user_id", userid); 
      params.put("product_id", prdid); 
      params.put("score", rating); 
      return params; 

     } 

    }; 

    RequestQueue requestQueue = Volley.newRequestQueue(mContext); 
    requestQueue.add(stringRequest); 
} 




} 

Répondre

0

Vous devez appeler item.setRate() à un moment donné ou bien l'élément ne sauve pas la nouvelle note.