2017-03-17 1 views
0

J'utilise un TwoWayView modifié https://github.com/lucasr/twoway-viewQuantité minimum de ViewHolders dans un RecyclerView?

J'utilise le SpannableGridLayoutManager donc mes vues peuvent tous être de tailles différentes. Si mes premières vues sont de grande taille, puis le défilement devient laggy car la quantité de vues changements (de sorte que le montant des titulaires de vue change)

J'ai la méthode setMaxRecycledViews qui fonctionne très bien après que je l'ai fait défiler un peu.

J'ai aussi essayé de jouer avec getExtraLayoutSpace mais je ne pense pas que ce soit ce que je devrais utiliser.

Fondamentalement, j'ai une grille qui peut avoir des vues de différentes tailles, mais ils ont la même mise en page. En haut, il y a une vue qui occupe tout l'espace et en dessous, c'est une vue qui occupe toute la largeur. Donc, il charge 2 détenteurs de vue, mais quand je le défile rapidement, il a besoin de 16 vues, ce qui cause un décalage.

Existe-t-il un moyen de forcer un minimum de ViewHolders?

+0

Vous pouvez définir la visibilité de vos vues sur VISIBLE, INVISIBLE (non visible mais occupant de l'espace ou GONE (sans espace occupé) en option – HaroldSer

Répondre

2

Cela a fait l'affaire pour moi

RecyclerView.RecycledViewPool recycledViewPool = new RecyclerView.RecycledViewPool(); 
    recycledViewPool.setMaxRecycledViews(0, 16); 
    MyAdapter adapter = new MyAdapter(getContext()); 
    for (int i = 0; i < 16; i++) { 
     MyAdapter.SimpleViewHolder simpleViewHolder = myAdapter.createViewHolder(mTwoWayView, 0); 
     recycledViewPool.putRecycledView(simpleViewHolder); 
    } 
    recyclerView.setRecycledViewPool(recycledViewPool); 

Fondamentalement avant de commencer quoi que ce soit d'augmenter les morceaux max à 15 (la valeur par défaut 5) et ajouter 12 morceaux. De cette façon, lorsque la disposition de la grille passe de 1 à 16, les utilisateurs sont déjà dans la piscine.