gpt4 book ai didi

android - 支持库从 23.1.1 更新到 23.2.1 后,RecyclerView 适配器中的 notifyDataSetChange() 变慢

转载 作者:搜寻专家 更新时间:2023-11-01 08:33:04 25 4
gpt4 key购买 nike

由于修复了一些错误,我不得不将支持库从 23.1.1 更新到 23.2.1。但是,我遇到了一个问题,即在此更新之后调用 notifyDataSetChange() 会花费大量时间并且会阻塞 UI。对于 10-20 项这样的短列表,您无法注意到差异,但对于 400-500 项的列表,notifyDataSetChange() 需要 2-3 秒才能执行,并且它会阻塞 UI。对于 23.1.1,我没有测量它需要多长时间,但从用户体验来看,即使列表包含 500-600 个项目,更新也是即时的。

代码没有变化,只是将支持库从 23.1.1 升级到 23.2.1。

我尝试了所有 23.2.xx、23.3.xx 和 23.4.xx 库,但都遇到了同样的问题。我没有尝试使用支持库 24.xx.xx,因为我需要使用 23 版本

当我从网络接收到 myItemList 时,我从我的 Activity 异步更新适配器:

...
((MyRecyclerViewAdapter) mAdapter).updateList(myItemList);
...

在适配器中我有

public void updateList(List<MyItems> items) {
this.mDataset = items;
notifyDataSetChanged();
}

它在 23.1.1 上确实没有延迟和阻塞 UI,正如我上面提到的,它在 23.2.1 和更高版本上变慢了。我想使用 23.2.1,因为引入了 RecylerView wrap_content 功能。

如有任何帮助,我们将不胜感激。

我的适配器还有:

public void onBindViewHolder(final ViewHolder holder, int position) {

holder.itemName.setText(mDataset.get(position).getName());
holder.itemPoints.setText(String.valueOf(mDataset.get(position).getPointsNumber()));


}

....

public static class ViewHolder extends RecyclerView.ViewHolder {

public final View mView;
TextView itemName;
TextView itemPoints;

public ViewHolder(View rowView) {
super(rowView);
itemName = (TextView) rowView.findViewById(R.id.item_name);
itemPoints = (TextView) rowView.findViewById(R.id.item_points);

mView = rowView;
}
}

最佳答案

我有一个类似的问题,我的 recyclerView 导致我的应用程序在更新其中的大量数据时卡住几秒钟(调用 notifyDataSetChanged 时)。这是因为我的 recyclerView 嵌套在 NestedScrollView 中。当我删除布局中的 NestedScrollView 时,问题就解决了。

关于android - 支持库从 23.1.1 更新到 23.2.1 后,RecyclerView 适配器中的 notifyDataSetChange() 变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39099494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com