2017-10-19 48 views
0

根據下圖,我在Activity內有兩個片段(a和b)。如何從一個活動中兩個碎片中的兩個recyclerview項目交換項目?

我能夠從第一個刪除,但如何將該項目添加到收藏夾片段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的適配器,這個刪除的項目?

+0

您是否嘗試了答案中提供的解決方案? – Mauker

回答

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或甚至通過EventBus即可將該項目傳遞到第二個片段。

而不是使用notifyDataSetChanged()這可能是非常昂貴的,嘗試使用notifyItemRemoved(int position)來代替。正如你可以看到the docs

如果你正在編寫一個適配器它總是會更有效,如果你能使用更具體的變更事件。作爲最後的手段依賴notifyDataSetChanged()。

+0

哦..非常感謝,我用第一個片段回調,它工作..多謝了@Mauker –

+0

不客氣!不要忘記將它標記爲接受:) – Mauker

2

我會做的是保持女演員列表(本地或在服務器上),每個女演員都包含一個isFavorite布爾屬性。

然後,當你有一個全局列表,每個recyclerview只顯示一個子集:

  • 在左邊,你看那裏isFavorite設置爲false,所有的女演員。
  • 在右側,您將顯示所有女演員isFavorite設置爲true。

你怎麼更新它可以做一些不同的方法,但這裏是我建議在較高的水平:

有一個onClick偵聽器的氣泡到活動的每個人,所以活動知道女演員最喜歡的狀態發生變化時。每當狀態改變時,告訴你的適配器在每個片段中更新。

如果你不想每次刷新整個列表,你可以整合一個removeadd方法,如Mauker's Answer

相關問題