如何在一个活动中交换两个碎片中的两个recyclerview项目中的项目?

时间:2017-10-19 14:00:25

标签: android android-recyclerview

根据下图,我在Activity内有两个片段(a和b)。

我可以从第一个删除但是如何将该项添加到收藏夹片段RecyclerView

删除女演员姓名并添加到收藏夹

deleting actress name and adding to favorites

My Viewholder code for RecyclerView Fragment one class:
addToFavoriteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mArrayList.remove(getAdapterPosition());

                notifyDataSetChanged();

            }
        });

如何在收藏夹Recyclerview的适配器中添加此已删除的项目?

2 个答案:

答案 0 :(得分:2)

我要做的是维护一个女演员列表(本地或服务器上),每个女演员都包含isFavorite布尔属性。

然后,当您有一个全局列表时,每个recyclerview仅显示一个子集:

  • 在左侧,您会显示isFavorite设置为false的所有女演员。
  • 在右侧,您会显示isFavorite设置为true的所有女演员。

如何更新它可以通过几种不同的方式完成,但这是我在高级别推荐的内容:

为每个冒充活动的人提供一个onClick监听器,这样活动就可以随时了解女演员最喜欢的状态。每次状态更改为女演员时,请告知每个片段中的适配器更新。

如果您不想每次都刷新整个列表,则可以集成removeadd方法,例如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 callbacksBroadcasting the item,或者甚至通过{{3}将该项传递到第二个片段}。

请尝试使用EventBus,而不是使用费用非常高的notifyDataSetChanged()。正如您在notifyItemRemoved(int position)上看到的那样:

  

如果您正在编写适配器,如果可以,则使用更具体的更改事件总是更有效。依靠notifyDataSetChanged()作为最后的手段。