Ton*_*ony 2 android adapter android-support-library notifydatasetchanged android-recyclerview
由于修复了一些错误,我必须将支持库从 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 时,我从活动异步更新适配器:
...
((MyRecyclerViewAdapter) mAdapter).updateList(myItemList);
...
Run Code Online (Sandbox Code Playgroud)
在适配器中我有
public void updateList(List<MyItems> items) {
this.mDataset = items;
notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)
在 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;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
我遇到了类似的问题,我的 recyclerView 导致我的应用程序在更新大量数据时(调用 notificationDataSetChanged 时)冻结几秒钟。这是因为我的 recyclerView 嵌套在 NestedScrollView 中。当我删除布局中的 NestedScrollView 时,问题就解决了。
| 归档时间: |
|
| 查看次数: |
6133 次 |
| 最近记录: |