1
我有這個選擇活動我用來選擇元素。它基於超類,它使用RecyclerView。它是使用泛型構建的,所以很容易讓一個「選擇器」傳遞一個模型類。可以使用它來進行單個或多個選擇。Xamarin.Android:RecyclerView.Adapter,元素的錯誤回收
問題是,如果我選擇元素,我滾動,有時我也看到其他行選擇。 行爲是奇怪的,如果我向下滾動一切看起來不錯,如果我足夠回來看到選定的行,我重新開始向下滾動,我看到其他行重複。這只是一個圖形化的東西,所以如果我按OK,活動只返回正確的元素。
我很確定這是一個有關回收的問題,所以我試圖設置爲不可循環使用IsRecyclable選定的行,但它不起作用。
有什麼建議嗎?在RecyclerView.Adapter的
部分:
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup viewGroup, int position)
{
var itemView = LayoutInflater.From(viewGroup.Context).Inflate(Resource.Layout.activity_basemodel_item, viewGroup, false);
var viewHolder = new BaseModelViewHolder(itemView, OnClick, OnLongClick, DetailActivityType);
viewHolder.IsRecyclable = !SelectionEnabled;
return viewHolder;
}
public void HighLight(RecyclerView.ViewHolder viewHolder, int position)
{
if (!SelectionEnabled) { return; }
var guid = ((BaseModelViewHolder)viewHolder).Model.Id;
if (SelectedGuids.Contains(guid))
{
viewHolder.ItemView.Selected = true;
viewHolder.ItemView.SetBackgroundColor(SelectedItemBackgroundColor);
}
else
{
viewHolder.ItemView.Selected = false;
}
}
public override void OnBindViewHolder(RecyclerView.ViewHolder viewHolder, int position)
{
TModel model = DataSet[position];
String title = model.Title;
String subtitle = model.Subtitle;
((BaseModelViewHolder)viewHolder).TxtTitle.SetText(title, TextView.BufferType.Normal);
if (!String.IsNullOrEmpty(subtitle) && !subtitle.Equals(title))
{
((BaseModelViewHolder)viewHolder).TxtSubtitle.SetText(subtitle, TextView.BufferType.Normal);
}
((BaseModelViewHolder)viewHolder).Model = model;
this.HighLight(viewHolder, position);
}
謝謝亞歷山大,它的工作。 –
這足以設置viewHolder.ItemView.SetBackgroundColor(DefaultItemBackgroundColor);我也改變了((BaseModelViewHolder)viewHolder).Model.Id;在DataSet [position];在OnBindViewHolder中。如果你曾經來過意大利的Jesi/Ancona地區,或者今年8月來到愛丁堡,那麼你有足夠的飲料可以喝醉:) –
不客氣的毛羅! – Alexandre