pull/1601/head
kunfei 3 years ago
parent d639b993a6
commit 5520ffc2fd
  1. 23
      app/src/main/java/io/legado/app/ui/book/toc/ChapterListAdapter.kt
  2. 5
      app/src/main/java/io/legado/app/ui/book/toc/ChapterListFragment.kt

@ -13,23 +13,26 @@ import io.legado.app.lib.theme.accentColor
import io.legado.app.utils.getCompatColor
import io.legado.app.utils.gone
import io.legado.app.utils.visible
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.launch
class ChapterListAdapter(context: Context, val callback: Callback) :
RecyclerAdapter<Pair<BookChapter, String>, ItemChapterListBinding>(context) {
class ChapterListAdapter(context: Context, val callback: Callback, private val scope: CoroutineScope) :
RecyclerAdapter<Pair<BookChapter, Deferred<String>>, ItemChapterListBinding>(context) {
val cacheFileNames = hashSetOf<String>()
val diffCallBack = object : DiffUtil.ItemCallback<Pair<BookChapter, String>>() {
val diffCallBack = object : DiffUtil.ItemCallback<Pair<BookChapter, Deferred<String>>>() {
override fun areItemsTheSame(
oldItem: Pair<BookChapter, String>,
newItem: Pair<BookChapter, String>
oldItem: Pair<BookChapter, Deferred<String>>,
newItem: Pair<BookChapter, Deferred<String>>
): Boolean {
return oldItem.first.index == newItem.first.index
}
override fun areContentsTheSame(
oldItem: Pair<BookChapter, String>,
newItem: Pair<BookChapter, String>
oldItem: Pair<BookChapter, Deferred<String>>,
newItem: Pair<BookChapter, Deferred<String>>
): Boolean {
return oldItem.first.bookUrl == newItem.first.bookUrl
&& oldItem.first.url == newItem.first.url
@ -49,7 +52,7 @@ class ChapterListAdapter(context: Context, val callback: Callback) :
override fun convert(
holder: ItemViewHolder,
binding: ItemChapterListBinding,
item: Pair<BookChapter, String>,
item: Pair<BookChapter, Deferred<String>>,
payloads: MutableList<Any>
) {
binding.run {
@ -61,7 +64,9 @@ class ChapterListAdapter(context: Context, val callback: Callback) :
} else {
tvChapterName.setTextColor(context.getCompatColor(R.color.primaryText))
}
tvChapterName.text = item.second
scope.launch {
tvChapterName.text = item.second.await()
}
if (item.first.isVolume) {
//卷名,如第一卷 突出显示
tvChapterItem.setBackgroundColor(context.getCompatColor(R.color.btn_bg_press))

@ -25,6 +25,7 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.Job
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@ -34,7 +35,7 @@ class ChapterListFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_chapt
override val viewModel by activityViewModels<TocViewModel>()
private val binding by viewBinding(FragmentChapterListBinding::bind)
private val mLayoutManager by lazy { UpLinearLayoutManager(requireContext()) }
private val adapter by lazy { ChapterListAdapter(requireContext(), this) }
private val adapter by lazy { ChapterListAdapter(requireContext(), this, this) }
private var durChapterIndex = 0
private var tocFlowJob: Job? = null
@ -118,7 +119,7 @@ class ChapterListFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_chapt
}
val useReplace = viewModel.bookData.value?.getUseReplaceRule() == true
it.map { chapter ->
Pair(chapter, chapter.getDisplayTitle(replaces, useReplace))
Pair(chapter, async { chapter.getDisplayTitle(replaces, useReplace) })
}
}
adapter.setItems(data, adapter.diffCallBack)

Loading…
Cancel
Save