在RecyclerView

时间:2017-08-22 15:02:14

标签: android android-recyclerview textview

我在RecyclerView中按字母顺序显示列表, 每个字母组的左侧都应显示一个字母,一次显示在每个组的顶部。 分隔线在ItemDecorator中呈现。

我正在尝试在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
    }

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

摆脱maxListRendered和previousLetter开始 - 这样做很危险并且会导致问题。

而是检查当前的索引。此外,我建议不要显示和隐藏元素,而是建议通过覆盖getItemViewType来使用不同的视图类型 - 这会使它们单独回收,以便它们可以有不同的视图。