簡體   English   中英

帶有GridLayoutManager的RecyclerView插入項目的位置錯誤

[英]RecyclerView with GridLayoutManager insert item wrong position

我在使用帶有2個跨度的GridLayoutManagerRecyclerView看到奇怪的行為。

我正在嘗試獲取兩列項目:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM