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へのサポートライブラリ更新後のRecyclerViewアダプタのnotifyDataSetChange()の遅さ
コードに変更はありませんでした。サポートライブラリを23.1.1から23.2.1にアップグレードするだけです。
私は23.2.xxと23.3.xxと23.4.xxのライブラリを試しましたが、すべて同じ問題がありました。私は23バージョン
を使用する必要があるので、私は私がネットワークからmyItemListを受信したとき、私は非同期的に私の活動からアダプタを更新するサポートライブラリ24.xx.xxでそれをしようとしなかった。
...
((MyRecyclerViewAdapter) mAdapter).updateList(myItemList);
...
アダプタでは、私はそれは遅延なしで仕事をしたと23.1.1でUIをブロックし、それが23.2.1以降でゆっくりしました上で、私が述べたように
public void updateList(List<MyItems> items) {
this.mDataset = items;
notifyDataSetChanged();
}
を持っています。 RecylerViewのwrap_content機能が導入されたので23.2.1を使いたいです。
ご迷惑をおかけして申し訳ございません。
私のアダプタもあります
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;
}
}
アダプタの表示方法を表示してください – Rahul
アダプタはRecyclerView.Adapterを拡張していますので、getViewメソッドを使用していません。 – Tony
次に、onBindViewHolder()を表示してください – Rahul