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




} 

答えて

0

ある時点でitem.setRate()を呼び出す必要があります。そうしないと、新しい評価が保存されません。

関連する問題