0
私はratingbarsを持つリストビューを持っています。最初は、すべての人の評価はゼロです。いずれかの評価バーに評価を与えると、選択した評価がサーバーにアップロードされ、正常にアップロードされたときにlistview
が最新の値で更新されるようにnotifyDataSetChanged()
に電話します。しかし、サーバーにアップロードされた値で評価バーを設定するのではなく、これまでのように評価がゼロになります。私が他のページに行って帰ってきたら、評価が正しく設定されました。 getView()
に何か問題がありますか?notifyDataSetChangedが呼び出されたときにratingbarが設定されない
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);
}
}