Ich verwende verschachtelte RecyclerView. Mittel in einem vertikalen RecyclerView Ich habe mehrere horizontale Recycler-AnsichtVerschachtelte Recylerview-Verzögerung während der ersten Scroll-Vorgänge und dann reibungslos scrollt?
Ich bin Adapter zu horizontalen Recylerviews innerhalb onBindViewHolder Methode des übergeordneten RecyclerView anschließen wie folgt.
@Override
public void onBindViewHolder(final MainViewHolder holder, final int position) {
switch (holder.getItemViewType()) {
case TYPE_PRODUCT:
((ListHolderProduct) holder).itemTitle.setText(browseCategoryHomePageItems.get(position).displayName.toUpperCase());
((ListHolderProduct) holder).recyclerView.setAdapter(new CarouselProductsRecyclerAdapter(context
, browseCategoryHomePageItems.get(position).products
, R.layout.activity_categoryhome_products_grid_item
, nestedRecyclerItemClickedListener
, position));
break;
case TYPE_DEAL:
((ListHolderDeal) holder).itemTitle.setText(browseCategoryHomePageItems.get(position).displayName.toUpperCase());
((ListHolderDeal) holder).recyclerView.setAdapter(new CarouselDealsRecyclerAdapter(context
, browseCategoryHomePageItems.get(position).dealItems
, R.layout.activity_categoryhome_deals_grid_item
, nestedRecyclerItemClickedListener
, position));
break;
//few more types like this
}
}
Nun, wenn ich scrollen Seite es ein wenig hinkt, da ich Adapter horizontal RecyclerView auf OnBindViewHolder Befestigung am
Und kann es N Anzahl der TYPE_PRODUCT oder jede Art von horizontalen Listen sein. Bedeutet, dass es mehrere horizontale Listen desselben Typs geben kann.
Irgendeine Idee, wie ich dieses Ding optimieren und die Scrollgeschwindigkeit verbessern kann.
Es ist verzögert, da setAdapter jedes Mal für eine Liste zuvor aufgerufen wird.
Update hierzu Ich erweitere LinearLayoutManager und stelle extraLayout-Speicherplatz ein, der mein Problem behoben hat, aber ich weiß nicht, ob dies der richtige Weg ist oder nicht. Ich setze zusätzlichen Platz wie unten beschrieben.
layoutManager.setExtraLayoutSpace(2 * this.getResources().getDisplayMetrics().heightPixels);
und follwoing ist Manager benutzerdefinierte Layout-Klasse
public class PreCachingLayoutManager extends LinearLayoutManager {
private static final int DEFAULT_EXTRA_LAYOUT_SPACE = 600;
private int extraLayoutSpace = -1;
private Context context;
public PreCachingLayoutManager(Context context) {
super(context);
this.context = context;
}
public PreCachingLayoutManager(Context context, int extraLayoutSpace) {
super(context);
this.context = context;
this.extraLayoutSpace = extraLayoutSpace;
}
public PreCachingLayoutManager(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
this.context = context;
}
public void setExtraLayoutSpace(int extraLayoutSpace) {
this.extraLayoutSpace = extraLayoutSpace;
}
@Override
protected int getExtraLayoutSpace(RecyclerView.State state) {
if (extraLayoutSpace > 0) {
return extraLayoutSpace;
}
return DEFAULT_EXTRA_LAYOUT_SPACE;
}
}
Check http://stackoverflow.com/questions/26649406/nested-recycler-view-height-doesnt-wrap-its-content –
nicht meine Frage anders ich bin vor Verzögerung bei der Scroll- – apk
Dank für Lösung mit getExtraLayoutSpace! Ich habe keine bessere Lösung gefunden, aber ich füge eine Verbesserung hinzu - ich gebe nur extra Raum zurück und gebe in anderen Fällen Null zurück. – Anton