标签: android-asynclistdiffer

RecyclerView 滚动到顶部,AsyncListDiffer 不起作用

我正在使用RecyclerViewwith AsyncListDiffer(计算和动画旧项目和新项目之间的差异,全部在后台线程上)。

我有一个按钮可以对列表进行排序。在我对其进行排序并将其重新设置为RecyclerView使用后,mDiffer.submitList(items);我还调用了recyclerView.scrollToPosition(0)或 ( smoothScrollToPosition(0)),但它没有任何效果。

我认为这种行为是意料之中的,因为AsyncListDifferscrollToPosition(0)调用时可能仍在计算差异,因此它没有任何影响。此外,默认情况下AsyncListDiffer不会滚动回顶部,而是将 RecyclerView 保持在相同的状态。

但是如何RecyclerViewAsyncListDiffer完成后告诉滚动到顶部并更新它?

android android-recyclerview android-asynclistdiffer android-diffutils

6
推荐指数
2
解决办法
1783
查看次数

AsyncListDiffer onAfterSubmitList 监听器

我尝试recyclerView.getLayoutManager().smoothScrollToPosition(recyclerView,null,0)仅在mDiffer.submitlist(list)完成“比较”并对列表更新/更改进行动画处理后才进行调用。

是否有 AsyncListDiffer 功能onAfterSubmitList(Callback callback)可以用来实现此目的?

如果没有,是否有办法找出何时submitList()完成其任务,以便我可以将其scrollToPosition(0)放在那里?

android android-asynclistdiffer

6
推荐指数
1
解决办法
1653
查看次数

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
查看次数