【问题标题】:ratingbar not setting when notifyDataSetChanged is called调用 notifyDataSetChanged 时未设置 ratingbar
【发布时间】:2016-11-17 06:07:58
【问题描述】:

我有一个带有评分栏的列表视图。最初,所有人的评分为零。当我对任何一个评分栏进行评分时,所选评分会上传到服务器,并且在成功上传后,我会调用 notifyDataSetChanged() 以便 listview 使用最新值进行更新。但它没有使用上传到服务器的值设置评级栏,而是像以前一样显示零评级。当我转到其他页面并返回时,现在评级已正确设置。我在getView() 中做错了吗?

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




}

【问题讨论】:

    标签: android android-arrayadapter notifydatasetchanged ratingbar


    【解决方案1】:

    您需要在某个时候调用 item.setRate() ,否则该项目不会保存新评级。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      • 1970-01-01
      • 2018-11-29
      • 2014-10-19
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多