根据下图,我在Activity
内有两个片段(a和b)。
我可以从第一个删除但是如何将该项添加到收藏夹片段RecyclerView
?
删除女演员姓名并添加到收藏夹
My Viewholder code for RecyclerView Fragment one class:
addToFavoriteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mArrayList.remove(getAdapterPosition());
notifyDataSetChanged();
}
});
如何在收藏夹Recyclerview
的适配器中添加此已删除的项目?
答案 0 :(得分:2)
我要做的是维护一个女演员列表(本地或服务器上),每个女演员都包含isFavorite
布尔属性。
然后,当您有一个全局列表时,每个recyclerview仅显示一个子集:
isFavorite
设置为false的所有女演员。isFavorite
设置为true的所有女演员。如何更新它可以通过几种不同的方式完成,但这是我在高级别推荐的内容:
为每个冒充活动的人提供一个onClick监听器,这样活动就可以随时了解女演员最喜欢的状态。每次状态更改为女演员时,请告知每个片段中的适配器更新。
如果您不想每次都刷新整个列表,则可以集成remove
和add
方法,例如Mauker's Answer。
答案 1 :(得分:1)
您可以在适配器中创建一个方法,从RecyclerView
中删除一个项目,然后返回给定的项目。
然后,您可以使用此项目引用将其添加到第二个RecyclerView
。
伪代码示例
public myItem removeAndGetItem(int position) {
myItem item = mArrayList.get(position);
mArrayList.remove(position);
notifyDataSetChanged();
return item;
}
然后你可以调用类似的东西(也是伪代码):
myItem item = adapter1.removeAndGetItem(position);
adapter2.add(item);
根据您的代码调整示例,它应该可以解决问题。
修改强>
我误读了关于RecyclerViews在不同片段上的部分。 所以,你仍然可以按照我在上面的例子中所做的那样做,你只需要使用Fragment callbacks或Broadcasting the item,或者甚至通过{{3}将该项传递到第二个片段}。
请尝试使用EventBus,而不是使用费用非常高的notifyDataSetChanged()
。正如您在notifyItemRemoved(int position)
上看到的那样:
如果您正在编写适配器,如果可以,则使用更具体的更改事件总是更有效。依靠notifyDataSetChanged()作为最后的手段。