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);
}
}