Sto usando nested RecyclerView. Mezzi all'interno di un RecyclerView verticale Ho più vista orizzontale del riciclatoreIntervallo di riclassificazione annidato mentre i primi scorrono per poi scorrere senza problemi?
Sto collegando l'adattatore a recylerviews orizzontali all'interno del metodo BindViewHolder di padre RecyclerView come segue.
@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
}
}
Ora ogni volta che scorrere la pagina si è in ritardo un po 'dal momento che vi allego adattatore per RecyclerView orizzontale su OnBindViewHolder
E non ci può essere N Numero di TYPE_PRODUCT o qualsiasi tipo di elenchi orizzontali. Significa che possono esserci più liste orizzontali dello stesso tipo.
Qualche idea su come ottimizzare questa cosa e migliorare la velocità di scorrimento.
È in ritardo poiché setAdapter viene chiamato ogni volta per l'elenco in precedenza.
Aggiornamento su questo sto ampliando LinearLayoutManager e in quanto sto impostando lo spazio extraLayout che ha risolto il mio problema ma non so che questo è giusto o no, sto impostando uno spazio extra come di seguito.
layoutManager.setExtraLayoutSpace(2 * this.getResources().getDisplayMetrics().heightPixels);
e follwoing è layout personalizzato classe dirigente
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;
}
}
controllo questo http://stackoverflow.com/questions/26649406/nested-recycler-view-height-doesnt-wrap-its-content –
senza la mia domanda diversa Sto affrontando ritardo mentre scorrimento – apk
Grazie per la soluzione con getExtraLayoutSpace! Non ho trovato una soluzione migliore, ma aggiungo un miglioramento: restituisco lo spazio extra solo la prima volta e restituisco zero negli altri casi. – Anton