2017-08-11 16 views
0

私はrecyclerView内の指定されたアイテムの位置からビューを取得したいが、ホルダーは常にnullになり、その理由がわからない。Android - holderがrecyclerViewからnullを戻すView adapterアイテムの位置

     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が返される理由は2つあります。

まず、RecyclerViewに安定したIDがない場合は、常にを返します。 rvSelectedPostTags.setHasStableIds(true)に電話してこの機能を有効にすることができます。ただし、これを使用するには、実際には論理的に安定したIDを持つ必要があります。つまり、与えられたデータ項目は、その位置に関係なく常に同じIDを返さなければなりません。

第2に、RecyclerViewの内部に現在配置されていないアイテムのIDを渡すと、nullが返されます。あなたが現在#5-#12のアイテムを見ることができますが、#200のためにViewHolderが欲しいなら、それはうまくいかないでしょう。

+0

私はすでにselectedPostTagsAdapter.setHasStableIds(true);を設定していますが、ホルダーをnullのままにしています。私は問題の2番目の理由を読んだが、それでもそれは得られない。 –

+0

あなたのアダプタは、何らかの種類のデータモデル(通常はリスト)によってサポートされています。 RecyclerViewは、いつでもそのデータの一部を表示します。データモデルには数千のアイテムが含まれ、RecyclerViewには10個しか表示されません。画面にない項目のIDは、 'findViewHolderForItemId'からnullを返します。 –

関連する問題