[英]RecyclerView with GridLayoutManager insert item wrong position
我在使用帶有2個跨度的GridLayoutManager
的RecyclerView
看到奇怪的行為。
我正在嘗試獲取兩列項目:
0 1
2 3
4 5
6 7
... 等等
為此,我正在創建一個GridLayoutManager
如下所示:
GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 2);
gridLayoutManager.setOrientation(GridLayoutManager.VERTICAL);
最初,這表現完美。 我的物品按我想要的順序顯示。
但是,我還需要能夠從列表中刪除項目,然后在用戶足夠快地采取行動后撤消刪除。
要刪除項目,然后允許撤消/插入該項目,當用戶在RecyclerView
項目中單擊“刪除”按鈕時,將執行以下邏輯。
final Item = mItems.getItem(position);
mItems.remove(position);
notifyItemRemoved(position);
// Give the user a chance to undo the removal
Snackbar.make(getView(),
"Item Removed", Snackbar.LENGTH_LONG)
.setAction(R.string.item_removed_snackbar_undo, new View.OnClickListener()
{
@Override
public void onClick(View view)
{
mItems.add(position, item);
notifyItemInserted(position);
}
}).show();
mItems
代表適配器中的項目列表。 position
表示單擊了“刪除”按鈕的項目的適配器位置。
刪除項目行為完美。 我可以刪除項目,並且可以設置動畫以填充空白區域。 但是,當我嘗試撤消刪除操作並將其添加回時,回收者視圖會混亂並且將插入空白區域。 例如,如果我有以下項目,而我刪除了項目2,則撤消刪除操作,將發生以下情況:
0 1
2 3
刪除2
0 1
3
加2回
0 1
2
3
此時,存在一個“空”視圖,應在其中放置3(第二行,第二列)。 如果我查詢適配器的大小,我仍然會得到4個項目,但是不知何故這些項目會分散到總共5個位置。 觸摸空白區域無濟於事,但是如果我重新定向/配置更改布局,則會回到
0 1
2 3
如預期的那樣。
難道我做錯了什么?
謝謝,扎克
我發現了問題!
在我重新插入該項目的邏輯之后,我正在調用mRecyclerView.scrollToPosition(position)
。 我錯誤地從上面的代碼中刪除了這段代碼,因為我認為這無關緊要(將來我會更加小心)。
無論如何,似乎有此調用會導致時髦的行為。 如果我刪除了該電話,一切都會按預期進行。 我懷疑這是在取消動畫或導致其他功能無法正常運行。
現在,我仍然希望顯示我的項目(以防用戶將其刪除,滾動使其在屏幕外,然后單擊“撤消”),但是稍后我會弄清楚-這已經足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.