1

При использовании более 9 рейтинговых баров в recyclerview, показывающих странные значения. то есть; когда я оцениваю рейтинговую марку, другая рейтинговая бара также меняет ее значение. Вот мой кодРейтинг бара в recyclerview, показывающий странные результаты по изменению рейтинга в xamarin

public class SurveyAdapter : RecyclerView.Adapter 
    { 
     const String TAG = "QUICK_ADAPTER"; 

     public override RecyclerView.ViewHolder OnCreateViewHolder (ViewGroup parent, int viewType) 
     { 
      View v = LayoutInflater.From (parent.Context).Inflate (Resource.Layout.survey_items, parent, false); 
      return new ViewHolder (v); 
     } 

     public override void OnBindViewHolder (RecyclerView.ViewHolder holder, int position) 
     { 
      var vh = holder as ViewHolder; 

      vh.ratingBar.Rating = 0; 
      vh.ratingBar.RatingBarChange += (o, e) => { 
       Log.Error (TAG, "Rating change pos:" + position + " & value :" + (int)vh.ratingBar.Rating + "\n"); 
      }; 
     } 

     public override int ItemCount { 
      get { return 20; } 
     } 

     public class ViewHolder : RecyclerView.ViewHolder 
     { 
      public RatingBar ratingBar{ get; private set; } 

      public ViewHolder (View itemView) : base (itemView) 
      { 
       itemView.FindViewById<RatingBar> (Resource.Id.Rating); 
      } 
     } 
    } 

Я получаю результаты, как это, когда изменение рейтинга в ratingbar.
предположит, я оценить ratingbar в положении 1

рейтинга позы: 1 & значение: 4
рейтинга позы: 8 & значение: 4
рейтинга позы: 12 & значение: 4
рейтинга позы: 14 & значение: 4

ответ

3

Пожалуйста, попробуйте это,

  1. Если вы используете ListView - переопределите следующие методы.

    @Override 
    public int getViewTypeCount() { 
        return getCount(); 
    } 
    
    @Override 
    public int getItemViewType(int position) { 
        return position; 
    } 
    
  2. Если вы используете RecycyclerView - переопределить только getItemViewType метод.

    @Override 
    public int getItemViewType(int position) { 
        return position; 
    } 
    
+0

Это решение работает для 'RecyclerView'. Чтобы подробно остановиться на работе этого решения, похоже, что «RecyclerView» использует логику «position% itemViewCount» для повторной обработки позиций. В отсутствие соответствующих кодовых блоков для повторного использования рейтинговых баров имеет смысл выборочно отключить функцию рециркуляции 'RecyclerView' для этого случая. Переопределение 'getItemViewType' делает именно это, возвращая' position' вместо 'position% itemViewCount'. – rhetonik

Смежные вопросы