Listview recyclerview中的评级栏显示xamarin评级变化的奇怪结果
在一个recyclerview中使用9个以上的评级条时,它会显示奇怪的值。ie;当我对一个评级栏进行评级时,其他评级栏也会更改其值。 这是我的密码Listview recyclerview中的评级栏显示xamarin评级变化的奇怪结果,listview,xamarin,xamarin.android,android-recyclerview,ratingbar,Listview,Xamarin,Xamarin.android,Android Recyclerview,Ratingbar,在一个recyclerview中使用9个以上的评级条时,它会显示奇怪的值。ie;当我对一个评级栏进行评级时,其他评级栏也会更改其值。 这是我的密码 public class SurveyAdapter : RecyclerView.Adapter { const String TAG = "QUICK_ADAPTER"; public override RecyclerView.ViewHolder OnCreateViewHolder (ViewGr
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);
}
}
}
公共类调查适配器:RecyclerView.Adapter
{
const String TAG=“快速适配器”;
public override RecyclerView.ViewHolder OnCreateViewHolder(视图组父级,int-viewType)
{
视图v=LayoutFlater.From(parent.Context)。充气(Resource.Layout.survey_items,parent,false);
返回新的视图持有者(v);
}
公共覆盖无效OnBindViewHolder(RecyclerView.ViewHolder,int位置)
{
var vh=作为视图持有人的持有人;
vh.ratingBar.Rating=0;
vh.ratingBar.ratingBar变化+=(o,e)=>{
日志错误(标记“额定值更改位置:”+位置+”&值:“+(int)vh.ratingBar.Rating+”\n”);
};
}
公共覆盖int ItemCount{
获取{return 20;}
}
公共类ViewHolder:RecyclerView.ViewHolder
{
public RatingBar RatingBar{get;private set;}
公共视图持有者(视图项目视图):基础(项目视图)
{
itemView.findviewbyd(Resource.Id.Rating);
}
}
}
在评级栏中更改评级时,我会得到这样的结果。假设我在位置1对比率杆进行评级 评级更改位置:1和值:4
评级更改位置:8和值:4
评级更改位置:12和值:4
评级更改位置:14和值:4请尝试此操作
ListView
,请覆盖以下方法
@Override
public int getViewTypeCount() {
return getCount();
}
@Override
public int getItemViewType(int position) {
return position;
}
RecycyclerView
-仅重写getItemViewType
方法
@Override
public int getItemViewType(int position) {
return position;
}
此解决方案适用于
RecyclerView
。为了详细说明此解决方案的工作原理,似乎RecyclerView
使用position%itemViewCount
逻辑来循环位置。在没有用于回收评级条的相关代码块的情况下,对于这种情况,有选择地关闭RecyclerView
的“回收”功能是有意义的。重写getItemViewType
就是这样做的,方法是返回位置,而不是位置%itemViewCount
。