2017-08-22 9 views
0

RecyclerViewでアルファベット順にリストを表示しています。 各文字グループは、各グループの先頭に1文字ずつ左側に表示されます。 分割線はItemDecoratorでレンダリングされます。テキストを設定し、RecyclerViewで条件付きでTextViewを表示する

私はonBindViewHolderでこれを解決しようとしています。 最初のレイアウトは問題なく動作します。私がトップからボトムまでスクロールすると、すべてが期待どおりになります。 しかし、私が最初の/大文字を失って行くか、それが再配列されたバックアップをスクロールします。

enter image description here

バックKまでスクロールした後、この例では欠けている、::予想通り

は条件付きで頭文字を示しているスクロールダウンする

enter image description here

public void onBindViewHolder(WordItemViewHolder wordItemViewHolder, final int position) { 

     final WordModel wordModel = wordModels.get(position); 
     wordItemViewHolder.textView.setText(wordModel.getWord()); 

     String word = wordModel.getWord(); 
     String currentFirstLetter = word.substring(0,1); 


     if(maxListRendered <= position){ 
      if(!previousLetter.contentEquals(currentFirstLetter) || position == 0){ 
       wordItemViewHolder.initialView.setText(currentFirstLetter.toUpperCase()); 
       wordItemViewHolder.initialView.setVisibility(View.VISIBLE); 
       previousLetter = currentFirstLetter; 
      }else{ 
       wordItemViewHolder.initialView.setVisibility(View.INVISIBLE); 
      } 
     } 
     maxListRendered++;//initialised as 0 in attempt to track calls to onBindViewHolder 
    } 

すべてのヘルプありがとう、ありがとう。

答えて

0

まず、maxListRenderedとPreviousLetterを削除してください。これは危険です。問題が発生します。

代わりに、現在のインデックスよりも上のインデックスを確認してください。また、要素を表示したり非表示にする代わりに、別のビュータイプを使用することをお勧めします。getItemViewTypeをオーバーライドしてください。

+0

ありがとう:) getItemViewTypeをオーバーライドすることは、同じ問題(私は完全にonBindViewHolderにロジックをダンプしました)に遭遇する可能性のある人にとって、これを動作させる鍵でした。 – Brian

関連する問題