0

ratingbars가있는 목록보기가 있습니다. 처음에는 등급이 모두 0입니다. 특정 등급에 등급을 부여하면 선택한 등급이 서버에 업로드되고 업로드가 성공적으로 완료되면 listview이 최신 값으로 업데이트되도록 notifyDataSetChanged()으로 전화합니다. 하지만 서버에 업로드 된 값으로 등급 표시 줄을 설정하지 않으면 이전과 같이 등급이 0으로 표시됩니다. 다른 페이지로 돌아와서 돌아 왔을 때 등급이 올바르게 설정되었습니다. 내 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()를 호출해야합니다. 그렇지 않으면 항목이 새 등급을 저장하지 않습니다.