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.getCompatColor
import io.legado.app.utils.gone import io.legado.app.utils.gone
import io.legado.app.utils.visible 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) : class ChapterListAdapter(context: Context, val callback: Callback, private val scope: CoroutineScope) :
RecyclerAdapter<Pair<BookChapter, String>, ItemChapterListBinding>(context) { RecyclerAdapter<Pair<BookChapter, Deferred<String>>, ItemChapterListBinding>(context) {
val cacheFileNames = hashSetOf<String>() val cacheFileNames = hashSetOf<String>()
val diffCallBack = object : DiffUtil.ItemCallback<Pair<BookChapter, String>>() { val diffCallBack = object : DiffUtil.ItemCallback<Pair<BookChapter, Deferred<String>>>() {
override fun areItemsTheSame( override fun areItemsTheSame(
oldItem: Pair<BookChapter, String>, oldItem: Pair<BookChapter, Deferred<String>>,
newItem: Pair<BookChapter, String> newItem: Pair<BookChapter, Deferred<String>>
): Boolean { ): Boolean {
return oldItem.first.index == newItem.first.index return oldItem.first.index == newItem.first.index
} }
override fun areContentsTheSame( override fun areContentsTheSame(
oldItem: Pair<BookChapter, String>, oldItem: Pair<BookChapter, Deferred<String>>,
newItem: Pair<BookChapter, String> newItem: Pair<BookChapter, Deferred<String>>
): Boolean { ): Boolean {
return oldItem.first.bookUrl == newItem.first.bookUrl return oldItem.first.bookUrl == newItem.first.bookUrl
&& oldItem.first.url == newItem.first.url && oldItem.first.url == newItem.first.url
@ -49,7 +52,7 @@ class ChapterListAdapter(context: Context, val callback: Callback) :
override fun convert( override fun convert(
holder: ItemViewHolder, holder: ItemViewHolder,
binding: ItemChapterListBinding, binding: ItemChapterListBinding,
item: Pair<BookChapter, String>, item: Pair<BookChapter, Deferred<String>>,
payloads: MutableList<Any> payloads: MutableList<Any>
) { ) {
binding.run { binding.run {
@ -61,7 +64,9 @@ class ChapterListAdapter(context: Context, val callback: Callback) :
} else { } else {
tvChapterName.setTextColor(context.getCompatColor(R.color.primaryText)) tvChapterName.setTextColor(context.getCompatColor(R.color.primaryText))
} }
tvChapterName.text = item.second scope.launch {
tvChapterName.text = item.second.await()
}
if (item.first.isVolume) { if (item.first.isVolume) {
//卷名,如第一卷 突出显示 //卷名,如第一卷 突出显示
tvChapterItem.setBackgroundColor(context.getCompatColor(R.color.btn_bg_press)) 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.IO
import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.async
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
@ -34,7 +35,7 @@ class ChapterListFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_chapt
override val viewModel by activityViewModels<TocViewModel>() override val viewModel by activityViewModels<TocViewModel>()
private val binding by viewBinding(FragmentChapterListBinding::bind) private val binding by viewBinding(FragmentChapterListBinding::bind)
private val mLayoutManager by lazy { UpLinearLayoutManager(requireContext()) } 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 durChapterIndex = 0
private var tocFlowJob: Job? = null private var tocFlowJob: Job? = null
@ -118,7 +119,7 @@ class ChapterListFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_chapt
} }
val useReplace = viewModel.bookData.value?.getUseReplaceRule() == true val useReplace = viewModel.bookData.value?.getUseReplaceRule() == true
it.map { chapter -> it.map { chapter ->
Pair(chapter, chapter.getDisplayTitle(replaces, useReplace)) Pair(chapter, async { chapter.getDisplayTitle(replaces, useReplace) })
} }
} }
adapter.setItems(data, adapter.diffCallBack) adapter.setItems(data, adapter.diffCallBack)

Loading…
Cancel
Save