2015-11-07 37 views
0

我有RecyclerViewListView)。每個列表項(行)都有上傳/下載按鈕。當用戶按下按鈕時,它必須從亞馬遜上傳或下載文件。來自回收商視圖列表項的異步呼叫

上傳或下載過程正在使用Kotlin Fuel框架完成。 Fuel是一個異步框架。一旦上傳或下載過程完成,我就寫了一個回調來訪問RecyclerView適配器。現在,我必須改變按鈕(例如,如果按鈕是上傳的,在用戶點擊之後,它必須上傳,一旦上傳完成,它應該將其改變爲下載按鈕)。一旦調用回調方法,我搜索列表(我傳遞給列表視圖)以查找RecyclerView中列表項的位置。

但我不知道如何弄清View Holder更新按鈕從上傳到下載或下載上傳。我嘗試過,一旦識別該行,就致電notifyDataSetChanged。但它的行爲如此不同,以至於RecyclerView的第一頁。它在notifyDataSetChanged之後根本不顯示上傳/下載按鈕。

我應該打電話notifyItemChanged(position),以便它調用bindViewHolder()其中有邏輯顯示下載按鈕,如果文件不存在,否則上傳按鈕。

還有沒有其他更好的方法來做到這一點。我在單獨的文件中定義了FUEL調用以實現可重用性。

回答

0

您不應該嘗試直接訪問ViewHolder

RecyclerView使用一個可重用其可見的項目視圖一個輕量級的模式(而不是創造的適配器,它會表現不佳,浪費存儲每一個項目視圖。)

相反,操縱你的模型適合您所在的下載狀態,然後致電notifyItemChanged(position),這反過來會導致您的RecyclerView致電onBindViewHolder代表您更新該項目。

您只需確保您的onBindViewHolder方法具有邏輯即可在您的模型中查找下載狀態以瞭解要執行的操作。

+0

當然會嘗試它,並接受答案,一旦它的工作.. – User