2017-09-19 5 views
0

J'ai un problème avec un listView que j'ai fait qui a une barre de notation et un élément texview. quand je change la cote pour une rangée, une autre change aussi aléatoirement.problème avec ratingBar dans ListView dans android

Le code est ci-dessous. Si quelqu'un pouvait aider, ce serait génial. Merci.

public class QuestionsInfoAdapter extends ArrayAdapter<RatingInfo> { 

private final Activity context; 
private final List<RatingInfo> list; 

public QuestionsInfoAdapter(Activity context, List<RatingInfo> list) { 
    super(context, R.layout.adapter_questionlist, list); 
    this.context = context; 
    this.list = list; 
} 

static class ViewHolder { 
    public TextView questiontxt; 
    RatingBar ratingBar1; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    View rowView = convertView; 
    try { 

     if (rowView == null) { 

      final LayoutInflater inflater = context.getLayoutInflater(); 
      rowView = inflater.inflate(R.layout.adapter_questionlist, null); 
      final ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.questiontxt = (TextView) rowView.findViewById(R.id.questiontxt); 
      viewHolder.ratingBar1 = (RatingBar) rowView.findViewById(R.id.ratingBar1); 

      viewHolder.ratingBar1.setOnRatingBarChangeListener(new OnRatingBarChangeListener() { 

       @Override 
       public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { 
          CustomerRatingForm.allShowRecords.get(position).setRating("" + rating); 

       } 
      }); 
      rowView.setTag(viewHolder); 

     } 

     final ViewHolder holder = (ViewHolder) rowView.getTag(); 
     final String s = CustomerRatingForm.allShowRecords.get(position).getQuestion(); 
     holder.questiontxt.setText(s); 
    } catch (Exception e) { 
     Log.d("Exception", "Exception>>" + e); 
    } 

    return rowView; 
} 
+0

vous devez enregistrer la note quand a été sélectionné et mis la valeur sur le viewHolder.ratingBar1 lorsque la getView être appelé. – tebitoq

Répondre

0

essayez d'utiliser HashMap<Integer, Integer> avec des valeurs de notation et définir chaque barre de note à la position X avec

viewHolder.ratingBar1.setOnRatingBarChangeListener(new OnRatingBarChangeListener() { 

      @Override 
      public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { 
         CustomerRatingForm.allShowRecords.get(position).setRating("" + rating); 
         hashMap.put(holder.getAdapterPosition(), rating); 
      } 
     }); 

. . . 

if (hashMap.contains(X)) 
    holder.ratingBar1.setRating(hashMap.get(X)); 
holder.questiontxt.setText(s);