相关疑难解决方法(0)

ListAdapter不会更新reyclerview中的项目

我正在使用新的支持库ListAdapter.这是我的适配器代码

class ArtistsAdapter : ListAdapter<Artist, ArtistsAdapter.ViewHolder>(ArtistsDiff()) {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return ViewHolder(parent.inflate(R.layout.item_artist))
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bind(getItem(position))
    }

    class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        fun bind(artist: Artist) {
            itemView.artistDetails.text = artist.artistAlbums
                    .plus(" Albums")
                    .plus(" \u2022 ")
                    .plus(artist.artistTracks)
                    .plus(" Tracks")
            itemView.artistName.text = artist.artistCover
            itemView.artistCoverImage.loadURL(artist.artistCover)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在更新适配器

musicViewModel.getAllArtists().observe(this, Observer {
            it?.let {
                artistAdapter.submitList(it)
            }
        })
Run Code Online (Sandbox Code Playgroud)

我的差异类

class ArtistsDiff : DiffUtil.ItemCallback<Artist>() {
    override fun areItemsTheSame(oldItem: Artist?, newItem: Artist?): Boolean { …
Run Code Online (Sandbox Code Playgroud)

android listadapter kotlin

46
推荐指数
10
解决办法
9914
查看次数

如果只是项目的内容发生变化,PagedListAdapter 不会更新列表

我正在使用 Room 和 Paging 库来显示类别。

我的实体:

@Entity(tableName = Database.Table.CATEGORIES)
data class Category(
    @PrimaryKey(autoGenerate = true) @ColumnInfo(name = ID) var id: Long = 0,
    @ColumnInfo(name = NAME) var name: String = "",
    @ColumnInfo(name = ICON_ID) var iconId: Int = 0,
    @ColumnInfo(name = COLOR) @ColorInt var color: Int = DEFAULT_COLOR
)
Run Code Online (Sandbox Code Playgroud)

我的道:

@Query("SELECT * FROM $CATEGORIES")
fun getPagedCategories(): DataSource.Factory<Int, Category>

@Update
fun update(category: Category)
Run Code Online (Sandbox Code Playgroud)

我的回购:

val pagedCategoriesList: LiveData<PagedList<Category>> = categoryDao.getPagedCategories().toLiveData(Config(CATEGORIES_LIST_PAGE_SIZE))
Run Code Online (Sandbox Code Playgroud)

我的视图模型:

val pagedCategoriesList: LiveData<PagedList<Category>>
    get() = repository.pagedCategoriesList
Run Code Online (Sandbox Code Playgroud)

我的适配器:

class CategoriesAdapter(val context: Context) …
Run Code Online (Sandbox Code Playgroud)

android android-adapter kotlin android-recyclerview android-paging

5
推荐指数
1
解决办法
6916
查看次数

AsyncListDiffer 没有更新 recyclerview

我有一个 RecyclerView 和一个使用AssyncListDiffer的适配器。我遇到的问题是,当 LiveData 发生更改时,recyclerview不会更新。观察者会收到通知,但列表不会更新。

这是我的适配器:

class HourAdapter(private val interaction: HourInteraction? = null) :
RecyclerView.Adapter<HourAdapter.HourViewHolder>() {

    private val differ = AsyncListDiffer(this, DIFF_CALLBACK)

    fun submitList(list: List<Hour>?) {
        differ.submitList(list)
    }

    private fun getHourAt(position: Int): Hour {
        return differ.currentList[position]
    }

    override fun getItemCount(): Int {
        return differ.currentList.size
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HourViewHolder {...}

    override fun onBindViewHolder(holder: HourViewHolder, position: Int) {...}

    val DIFF_CALLBACK = object : DiffUtil.ItemCallback<Hour>() {

      override fun areItemsTheSame(oldItem: Hour, newItem: Hour): Boolean {
        return …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-recyclerview android-asynclistdiffer android-diffutils

4
推荐指数
1
解决办法
3031
查看次数