2015-06-29 12 views
23

Desidero un RecyclerView.LayoutManager che mi consente di specificare conteggi di span diversi per righe diverse come un motivo ripetuto. Per esempio 2,3 con 10 articoli sarebbe simile a questa:Layout di RecyclerView Gestore conteggi di span diversi su righe diverse

------------- 
    |  |  | 
    |  |  | 
    ------------- 
    | | | | 
    | | | | 
    ------------- 
    |  |  | 
    |  |  | 
    ------------- 
    | | | | 
    | | | | 
    ------------- 

posso pensare a un modo per incidere questo con GridLayoutManager e SpanSizeLookup ma qualcuno ha escogitato un modo più pulito per fare questo?

+0

Non è questo implementato in ['StaggeredGridLayoutManager'?] (https://developer.android.com/reference/android/support/v7/widget/StaggeredGridLayoutManager.html) – user4989692

risposta

38

Per fare quello che vuoi, probabilmente devi scrivere il tuo LayoutManager.

credo che questo sia più facile:

// Create a grid layout with 6 columns 
    // (least common multiple of 2 and 3) 
    GridLayoutManager layoutManager = new GridLayoutManager(this, 6); 

    layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
     @Override 
     public int getSpanSize(int position) { 
      // 5 is the sum of items in one repeated section 
      switch (position % 5) { 
      // first two items span 3 columns each 
      case 0: 
      case 1: 
       return 3; 
      // next 3 items span 2 columns each 
      case 2: 
      case 3: 
      case 4: 
       return 2; 
      } 
      throw new IllegalStateException("internal error"); 
     } 
    }); 

Se il vostro oggetto griglia ha bisogno di sapere la sua dimensione arco, si può trovare in questo modo all'interno ViewHolder:

 // this line can return null when the view hasn't been added to the RecyclerView yet 
     RecyclerView recyclerView = (RecyclerView) itemView.getParent(); 
     GridLayoutManager gridLayoutManager = (GridLayoutManager) recyclerView.getLayoutManager(); 
     int spanSize = gridLayoutManager.getSpanSizeLookup().getSpanSize(getLayoutPosition()); 
+0

Questa è una soluzione fantastica, grazie mille! –

+0

questa risposta è più semplice http://stackoverflow.com/questions/33696096/setting-span-size-of-single-row-in-staggeredgridlayoutmanager?rq=1 – amorenew

+0

mi hai salvato la vita – JiratPasuksmit

Problemi correlati