3

我試着搜索這個問題,但找不到合適的解決方案。如何訪問隱藏的RecyclerView項目?

基本上,我有一個包含6個項目的RecyclerView的佈局。

6個項目中的5個在屏幕上可見。第六隱藏。

現在在執行一個動作(在這裏拖放),我修改了每個項目中的內容。這發生了。

但是,只爲可見項目。

當我在執行操作後向下滾動第6項時,它不會顯示更改。只有可見5才行。

我在適配器內使用getChildCount()回收器視圖的方法,它顯示的值爲5(不是6)。我調試了一下,發現它目前正在考慮屏幕上可見的兒童人數。

如果我向下滾動一點,第一項和第六項的上半部分的下面部分是可見的,並執行操作來修改所有項目內容 - 它的工作原理!

我認爲使用LinearLayoutManager是一種解決方案,因爲它在任何情況下返回itemCount爲6,但無法理解如何使用來訪問RecyclerView的項目/子項。

我故意嘗試使用getChildAt(5)來訪問和修改第6件RecyclerView,我得到了NullPointerException,因爲RV由於它在屏幕上不可見而不能識別該項目。

此外,項目內容在執行操作時的修改正在使用RV適配器內部鍵入的代碼在自定義方法中執行,而不是RecyclerView適配器的重寫方法,如onBindViewHolder(...),通過獲取對視圖的引用和在getChildAt()的幫助下訪問他們的子視圖。

我懷疑是否需要代碼,但如果需要,請告知。我正在使用自定義的DragListener類,我正在訪問視圖,每個RecyclerView項目的子視圖和修改數據。

如何訪問RV的所有項目(可見和隱藏)並一次修改它們?

+0

我想這是顯而易見的作爲訪問一個項目和修改的合法途徑是通過OnBindViewHolder(...)。如果正確,那麼我如何才能使用OnDragListener方法?因爲如果我在Adapter中使用OnDragListener,對於某些功能,我不能同時讓它與Adapter方法協調。我希望我很清楚...... –

+0

您是否爲該項目調用了'notifyItemChanged(position)'。 – Qamar

+0

對不起Qamar,但我沒有看到我的問題和這種方法之間的很多聯繫。也許你必須詳細說明,並通過解決我的問題讓我明白 –

回答

-2

仍然沒有答案的問題,你有同樣的問題?通過研究問題幫助我們找到解決方案,然後貢獻研究結果以及您嘗試的其他部分作爲部分答案。這樣,即使我們無法弄清楚,下一個人還有更多的事情要做。也可以在答案中獲得一些聲望並投票回答問題,這樣可以獲得更多的關注,也可以在問題上設置獎勵。

+0

請不要將此作爲答案。等到你有足夠的聲望發表評論,然後在問題上添加評論。 – bfontaine

+1

k好友... –

+0

可以給我答案... –

1

您不能通過直接操作RecyclerView的孩子來修改RecyclerView的項目。相反,您必須通過更改適配器中的項目來應用所有更改。

假設您有一個標題,現在這個標題在重新排序後會改變。然後你必須更改適配器中所有元素的標題。最後,你必須觸發這些項目重繪。

RecyclerView的名稱有一定的原因。只有可見物品(加上一個)被創建,然後每當一個物品消失時,另一個物品將被重新用於任何新出現的物品。這就是爲什麼如果你稍微向上移動你的視圖,它會起作用。現在你有六個可見的項目。

對於足夠大的數據集,子計數遠低於構成所示數據基礎的項目數。因此,您無法使用RecyclerView的子項來更改數據。