pull/32/head
kunfei 5 years ago
parent b2c00449be
commit 79f3b4f5a9
  1. 36
      app/src/main/java/io/legado/app/ui/search/DiffCallBack.kt
  2. 88
      app/src/main/java/io/legado/app/ui/search/SearchAdapter.kt

@ -3,26 +3,28 @@ package io.legado.app.ui.search
import androidx.recyclerview.widget.DiffUtil
import io.legado.app.data.entities.SearchShow
class DiffCallBack(private val oldItems: List<SearchShow>, private val newItems: List<SearchShow>) :
DiffUtil.Callback() {
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
return oldItems[oldItemPosition].name == newItems[newItemPosition].name
&& oldItems[oldItemPosition].author == newItems[newItemPosition].author
class DiffCallBack : DiffUtil.ItemCallback<SearchShow>() {
override fun areItemsTheSame(oldItem: SearchShow, newItem: SearchShow): Boolean {
return oldItem.name == newItem.name
&& oldItem.author == newItem.author
}
override fun getOldListSize(): Int {
return oldItems.size
override fun areContentsTheSame(oldItem: SearchShow, newItem: SearchShow): Boolean {
return oldItem.originCount == newItem.originCount
&& (oldItem.coverUrl == newItem.coverUrl || !oldItem.coverUrl.isNullOrEmpty())
&& (oldItem.kind == newItem.kind || !oldItem.kind.isNullOrEmpty())
&& (oldItem.latestChapterTitle == newItem.latestChapterTitle || !oldItem.kind.isNullOrEmpty())
&& oldItem.intro?.length ?: 0 > newItem.intro?.length ?: 0
}
override fun getNewListSize(): Int {
return newItems.size
}
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
return oldItems[oldItemPosition].originCount == newItems[newItemPosition].originCount
}
override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? {
return super.getChangePayload(oldItemPosition, newItemPosition)
override fun getChangePayload(oldItem: SearchShow, newItem: SearchShow): Any? {
return when {
oldItem.originCount != newItem.originCount -> 1
oldItem.coverUrl != newItem.coverUrl -> 2
oldItem.kind != newItem.kind -> 3
oldItem.latestChapterTitle != newItem.latestChapterTitle -> 4
oldItem.intro != newItem.intro -> 5
else -> null
}
}
}

@ -4,7 +4,6 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.paging.PagedListAdapter
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import io.legado.app.R
import io.legado.app.data.entities.SearchShow
@ -16,21 +15,7 @@ import kotlinx.android.synthetic.main.item_bookshelf_list.view.tv_name
import kotlinx.android.synthetic.main.item_search.view.*
import org.jetbrains.anko.sdk27.listeners.onClick
class SearchAdapter : PagedListAdapter<SearchShow, SearchAdapter.MyViewHolder>(DIFF_CALLBACK) {
companion object {
@JvmField
val DIFF_CALLBACK = object : DiffUtil.ItemCallback<SearchShow>() {
override fun areItemsTheSame(oldItem: SearchShow, newItem: SearchShow): Boolean =
oldItem.name == newItem.name
&& oldItem.author == newItem.author
override fun areContentsTheSame(oldItem: SearchShow, newItem: SearchShow): Boolean =
oldItem.name == newItem.name
&& oldItem.author == newItem.author
}
}
class SearchAdapter : PagedListAdapter<SearchShow, SearchAdapter.MyViewHolder>(DiffCallBack()) {
var callBack: CallBack? = null
@ -38,6 +23,16 @@ class SearchAdapter : PagedListAdapter<SearchShow, SearchAdapter.MyViewHolder>(D
return MyViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_search, parent, false))
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int, payloads: MutableList<Any>) {
if (payloads.isEmpty()) {
super.onBindViewHolder(holder, position, payloads)
} else {
getItem(position)?.let {
holder.bindChange(it, payloads, callBack)
}
}
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
getItem(position)?.let {
holder.bind(it, callBack)
@ -49,8 +44,8 @@ class SearchAdapter : PagedListAdapter<SearchShow, SearchAdapter.MyViewHolder>(D
fun bind(searchBook: SearchShow, callBack: CallBack?) = with(itemView) {
tv_name.text = searchBook.name
bv_originCount.setBadgeCount(searchBook.originCount)
tv_author.text = context.getString(R.string.author_show, searchBook.author)
bv_originCount.setBadgeCount(searchBook.originCount)
if (searchBook.latestChapterTitle.isNullOrEmpty()) {
tv_lasted.gone()
} else {
@ -99,6 +94,65 @@ class SearchAdapter : PagedListAdapter<SearchShow, SearchAdapter.MyViewHolder>(D
callBack?.showBookInfo(searchBook.name, searchBook.author)
}
}
fun bindChange(searchBook: SearchShow, payloads: MutableList<Any>, callBack: CallBack?) =
with(itemView) {
when (payloads[0]) {
1 -> bv_originCount.setBadgeCount(searchBook.originCount)
2 -> searchBook.coverUrl.let {
ImageLoader.load(context, it)//Glide自动识别http://和file://
.placeholder(R.drawable.img_cover_default)
.error(R.drawable.img_cover_default)
.centerCrop()
.setAsDrawable(iv_cover)
}
3 -> {
val kinds = searchBook.getKindList()
if (kinds.isEmpty()) {
ll_kind.gone()
} else {
ll_kind.visible()
for (index in 0..2) {
if (kinds.size > index) {
when (index) {
0 -> {
tv_kind.text = kinds[index]
tv_kind.visible()
}
1 -> {
tv_kind_1.text = kinds[index]
tv_kind_1.visible()
}
2 -> {
tv_kind_2.text = kinds[index]
tv_kind_2.visible()
}
}
} else {
when (index) {
0 -> tv_kind.gone()
1 -> tv_kind_1.gone()
2 -> tv_kind_2.gone()
}
}
}
}
}
4 -> {
if (searchBook.latestChapterTitle.isNullOrEmpty()) {
tv_lasted.gone()
} else {
tv_lasted.text = context.getString(
R.string.lasted_show,
searchBook.latestChapterTitle
)
tv_lasted.visible()
}
}
5 -> tv_introduce.text =
context.getString(R.string.intro_show, searchBook.intro)
}
}
}
interface CallBack {

Loading…
Cancel
Save