私はRecyclerViewを250個のアイテムでポーズします。 各ビューには4つのTextViewしかありません。 RecyclerView onCreateViewHolderのアダプターを作成するときに約5ミリ秒かかり、onBindViewHolderに約3ミリ秒かかります。 250アイテムの場合、2秒の遅延があります。この2秒間で、アダプタ割り当てがメインスレッド上で実行されなければならないため、UIがフリーズします。で例えばRecyclerViewはonCreateViewHolderとonBindViewHolderを起動するときに多くの時間をとります:プログレスバーはフリーズします
onCreateViewHolderそこに多くのレイアウトインフレの横に行くのではありません。
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
long lTime = System.currentTimeMillis();
switch (viewType) {
case TYPE_HEADER:
SpendingHeader lResult = new SpendingHeader(LayoutInflater.from(mContext).inflate(R.layout.layout_spending_item_header, null));
LogUtils.logTime(lTime, TAG, "onCreateViewHolder");
return lResult;
default:
SpendingItem lResult2 = new SpendingItem(LayoutInflater.from(mContext).inflate(R.layout.layout_spending_item, null));
LogUtils.logTime(lTime, TAG, "onCreateViewHolder");
return lResult2;
}
}
完全な計算のものがAsyncTaskでバックグラウンドスレッドで実行されます。 onCerateViewHolderとonBindViewHolderだけが時間がかかり、プログレスバーがフリーズします。私は待つのがいいですが、プログレスバーがフリーズするのは良くありません。これを回避する方法はありますか?また、私は30番目の項目にスクロールした後に例えばプログレスバーを取得する怠惰なリストを望んでいません。
注:Recyclerviewは、actionbarBar ControllableLayoutビヘイビアのNestedScrollViewの一部でなければなりません。これは問題になるかもしれませんか? here
問題はNestedScrollViewのようです。通常、onCreateViewHolderとonBindViewHolderはすぐに250回呼び出されません(すべてが画面に収まらない場合を除く)。通常、onBindViewHolderは、新しいビューが画面に入るときにのみ呼び出されます。 –
Recyclerviewはすでに 'NestedScrollingChild'を実装しているので、AppbarLayoutの動作を得るためにNestedScrolling Layoutに配置する必要はほとんどありません。 – Kuffs