我用250個項目填充我的RecyclerView。 每個視圖只有4個TextViews。在爲RecyclerView創建適配器時,onCreateViewHolder需要約5 ms,onBindViewHolder需要約3 ms。對於250件物品,我們會延遲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也必須是NestedScrollView for actionbarBar ControllableLayout行爲的一部分。可能這是一個問題?見here
看起來問題是NestedScrollView。通常onCreateViewHolder和onBindViewHolder不會立即調用250次(除非它們全部適合屏幕)。通常onBindViewHolder僅在新視圖進入屏幕時調用。 –
Recyclerview已經實現了'NestedScrollingChild',所以你很可能不需要將它放在NestedScrolling Layout中以獲得AppbarLayout行爲。 – Kuffs