還是先上效果圖,我們在查看小說目錄時,可以看到正在閱讀的章節字體爲紅色,其餘章節字體爲黑色。
主要解決方式來自於 https://blog.csdn.net/qq_34882161/article/details/54944188,感謝!
思路在於將當前章節的章節名傳遞給adapter,然後調用notifydata,此時會調用onBindViewHolder重新繪製,我們在這個函數中進行比較,把與傳入的章節名相同的ViewHolder的章節名的字體顏色設置爲紅色,其餘字體顏色爲黑色。與上篇文章不同的是,這裏當我點擊其他章節時會關閉RecyclerView,因此我並沒有使用lastView記錄上一個章節的ViewHolder,只要每次打開RecyclerView時重新傳入當前章節名就好了。
if (mBookChapter.equals(holder.tvChapter.getText())){
holder.tvChapter.setTextColor(mView.getResources().getColor(R.color.colorAccent));
}else{
holder.tvChapter.setTextColor(mView.getResources().getColor(R.color.black));;
}
當我們按照上面寫好代碼後,可以看到章節名已經變爲紅色了。但是!當我們上下滑動一段距離然後再滑回來時,會偶爾出現章節名並沒有出現改變顏色的情況。我們只需要調用RecyclerView的setItemViewCacheSize設置爲0即可了。
directoryView.setItemViewCacheSize(0)
除此之外,我們還可以使用
directoryView.scrollToPosition(mBookIndex)
達到模擬滑動的效果,這樣我們每次打開章節列表,就可以看到我們當前正在閱讀的章節和周圍其他的章節了。不過scrollToPosition只是讓這個item滑動到我們可以看到的範圍內,並不是使這個item處於最頂端,如果你想讓item處於最頂端那就請用scrollToPositionWithOffset(postion, 0)吧~