2017-08-11 107 views
0

我想從我的recyclerView中的給定項目位置獲取視圖,但持有者始終爲空,我無法弄清楚原因。Android - 持有者從recyclerView適配器項目位置返回null

     Rect toRect = new Rect(); 
         selectedPostTagsAdapter.addPostTag(postTag); 
         selectedPostTagsAdapter.notifyDataSetChanged(); 
         for (int i = 0; i < selectedPostTagsAdapter.getItemCount(); i++) { 
          RecyclerView.ViewHolder holder = rvSelectedPostTags.findViewHolderForItemId(selectedPostTagsAdapter.getItemId(i)); 
          if (holder != null) { 
           View viewX = holder.itemView; 
           viewX.getGlobalVisibleRect(toRect); 
          } 

回答

1

RecyclerView.findViewHolderForItemId()有兩個原因可能返回null。

首先,它會總是如果您的RecyclerView沒有穩定的ID,則返回null。您可以撥打rvSelectedPostTags.setHasStableIds(true)開啓此功能。但是,請注意,如果您想使用此功能,您實際上必須擁有邏輯穩定的ID。所有這一切意味着給定的數據項應始終返回相同的ID,而不管其位置。

其次,如果您傳遞一個當前未在RecyclerView內佈置的項目的ID,它將返回null。因此,如果您目前可以看到項目#5-#12,但是想要#ViewHolder#200,則無法工作。

+0

我已經設置selectedPostTagsAdapter.setHasStableIds(true);,但我一直持有人爲空。我已經讀過這個問題的第二個可能的原因,但我仍然不明白。 –

+0

您的適配器支持某種數據模型,通常是一個列表。 RecyclerView將在任何時候只顯示一些數據。您的數據模型可能包含數千個項目,而RecyclerView僅顯示其中的10個項目。不在屏幕上的項目的任何id將從'findViewHolderForItemId'返回null –

相關問題