【发布时间】:2018-06-05 14:16:09
【问题描述】:
我认为我做错了,但我有一个 RecyclerView 适配器和简单的按钮单击(在本例中为 LinearLayout),它会触发以下操作
this.NotifyItemRemoved(position);
完整的按钮代码如下
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
..........
LinearLayout _ARC = V.FindViewById<LinearLayout>(Resource.Id.moreArc);
_ARC.Click += async delegate {
try
{
Log.Info("101029", "ARC_Clicked");
await usersAct.SWITCH_ARCHIVE(ID); // some user action
this.NotifyItemRemoved(position);
}
catch (Exception X)
{
Log.Info("101029", "ERROR AT ARC_Clicked: " + X.Message);
}
};
.......
}
这工作正常,项目被很好地移除,但是当我在recyclerview 中向下滚动并返回到项目被移除的位置时,项目又出现了。
我认为我做错了,或者我的逻辑不正确?有什么想法吗?
【问题讨论】:
-
NotifyItemRemoved仅将其从显示器中删除(如果显示)并导致屏幕上其他元素的移动(动画),您还需要实际从适配器中删除支持数据正在存储它。 -
哦,这就是我最初的想法,但我不认为我可以通过
public override RecyclerView.ViewHolder OnCreateViewHolder做到这一点?或者我是否必须在我将adapter设置为RecyclerView.SetAdapter(adapter);的片段中执行此操作? -
@SushiHangover 你是个天才 :) 谢谢你,是的,我找到了根据你的 cmets 删除它的方法 - 你能把它写成答案,我会将其标记为已接受的答案:我使用
.RemoveAt(index)函数从实际的List中删除了该项目,因为它是List -
我添加了一个答案,说明如何使用
ObservableCollection完成所有Notify***工作
标签: android xamarin android-recyclerview xamarin.android