优化
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user