我在RecyclerView中按字母顺序显示列表, 每个字母组的左侧都应显示一个字母,一次显示在每个组的顶部。 分隔线在ItemDecorator中呈现。
我正在尝试在onBindViewHolder中解决这个问题。 初始布局工作正常。当我从上到下滚动时,正如预期的那样。 但是当我向后滚动时,初始/大写字母会丢失或重新排序。
向下滚动会按预期有条件地显示首字母:
在向上滚动后,在此示例中缺少k,:
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 :(得分:0)
摆脱maxListRendered和previousLetter开始 - 这样做很危险并且会导致问题。
而是检查当前的索引。此外,我建议不要显示和隐藏元素,而是建议通过覆盖getItemViewType
来使用不同的视图类型 - 这会使它们单独回收,以便它们可以有不同的视图。