我看到在RecyclerView
使用GridLayoutManager
與2跨度奇怪的行爲。RecyclerView與GridLayoutManager插入項目錯誤的位置
我試圖讓項目的兩列:
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
預期。
我做錯了什麼?
感謝, 扎克
我有一個類似的問題,但後我雖然我意識到有一種情況時,onCreateViewHolder()方法返回一個緩存的RecyclerView.ViewHolder - onCreateViewHolder必須總是返回一個新的RecycleriView.ViewHolder或RecyclerView.ViewHolder實例,它是在外部創建的RecyclerView池,該錯誤也造成了很多崩潰 – mstrengis
感謝您的快速響應。我的代碼總是在我的onCreateViewHolder()方法中返回一個新的ViewHolder,所以我不認爲這是不幸的。 – Zach