2014-07-21 24 views
9

Ciao a tutti Ho appena creato una demo per lavorare con il nuovo widget Android L RecyclerView. Ho anche implementato Pull-To-Refresh usando SwipeRefreshLayout ma il problema per me ora è come posso implementare appiccicoso intestazione qui, perché quando provo a impostareIntestazione appiccicosa Android RecyclerView/Section Header RecyclerView

mRecyclerView.setOnScrollListener(new OnScrollListener() { 

    @Override 
    public void onScrolled(int arg0, int arg1) { 

    } 

    @Override 
    public void onScrollStateChanged(int arg0) { 
     // TODO Auto-generated method stub 

    } 
}); 

ho solo questi 2 metodi in modo da non avere alcuna idea di come posso gestire questa ...

Aiutateci ..

+0

Si prega di spiegare che tipo di sticky-header si sta cercando? Solo una intestazione? un numero qualsiasi di intestazioni di stile di categoria che prenderebbero la posizione dell'ultimo mentre scorri? – Simon

+1

Si prega di fare riferimento ad Instagram .. come Instagram Sto cercando un'intestazione appiccicosa o puoi dire intestazione di sezione in cui ogni riga avrà quell'intestazione che rimane in cima fino a quando il suo contenuto non scorre! – Pramod

risposta

5

Dal momento che le risposte precedenti non forniscono una soluzione affidabile, propongo la mia libreria FlexibleAdapter per RecyclerView, che è in grado di gestire tutte le seguenti funzionalità in una sola volta:

  • funzionalità appiccicoso per le intestazioni delle sezioni, funziona con tutti e 3 i LayoutManager e anche con ViewPager.
  • Modalità di selezione.
  • Tipi di articoli multipli con mappatura automatica.
  • ViewHolders predefinite.
  • Elementi espandibili con coerenza di selezione.
  • Draggable e Swipe-to-Dismiss.
  • Filtro asincrono animato con testo espandibile.
  • Animazioni a scorrimento.
  • EndlessScroll con collegamento adattatore.
  • UndoHelper & Helper ActionMode.
  • FastScroller.
  • ... e altro ancora.

L'idea alla base è evitare di creare da zero un adattatore personalizzato per ogni progetto e di avere più funzionalità in una libreria, invece di affidarsi a librerie diverse che supportano solo 1 o 3 di esse e che si non posso unire.

+4

Potete per favore rivedere questo post: [Come offrire librerie open source personali?] (Https://meta.stackexchange.com/q/229085)? Sembra che tu stia pubblicando sulla tua biblioteca in vari posti senza adattare la tua risposta al contesto. –

+0

Ok, l'ho letto. Cerco sempre di rimanere nel contesto, ma in effetti, i commenti precedenti dicevano che la soluzione proposta non funziona. Quindi, è per questo che ho proposto la mia biblioteca. – Davidea

5

public void onScrolled(int dx, int dy)

questi sono i due argomenti che si sta ricevendo onScrolled, che significa che il numero di pixel che la RecyclerView modificato sul assi X e Y ... quindi probabilmente tutto quello che vuole fare è:

@Override 
public void onScrolled(int dx, int dy) { 
    if(dx < 0) // going up 
     showSitckyHeader(); 
} 

probabilmente puoi migliorare ulteriormente questa implementazione aggiungendo un importo di scorrimento minimo. Qualcosa di simile:

int totalScrolled = 0; 
@Override 
public void onScrolled(int dx, int dy) { 
    totalScrolled += dx; 
    if(totalScrolled < MIN_SCROLL) 
     showSitckyHeader(); 
    if(dx > 0) 
     totalScrolled = 0; 
} 

@Override 
public void onScrollStateChanged(int newState) { 
    if(newState == SCROLL_STATE_IDLE || newState = SCROLL_STATE_SETTLING) 
     totalScrolled = 0; 
} 

o anche andare oltre e mettere in atto la velocità, il tempo a contare, ma questi tipi di implementazione sono più difficili, e si deve mettere alla prova voi stessi.

+0

Grazie per la direzione.Darò la prova con il tuo approccio, ma le preoccupazioni sono quando ricicla il recycleview Devo trovare quale elemento è in cima e quindi devo trovare la vista dell'intestazione in quell'elemento e impostare il margine a tale o c'è un modo migliore? – Pramod

+0

quello che capisco con "intestazione adesiva" è che l'intestazione può essere mostrata in qualsiasi momento quando l'utente scorre verso l'alto. Ciò significa che l'intestazione effettiva non fa parte della vista RecyclerView, ma si trova in un FrameLayout con l'intestazione e il RecyclerView al suo interno. La prima vista su RecyclerView sarà una vista vuota con le stesse dimensioni dell'intestazione. Ed è sufficiente animare/spostare l'intestazione su e giù ogni volta che l'elenco si sposta su e giù. Un metodo utile per questo è https://developer.android.com/reference/android/view/View.html#offsetTopAndBottom(int) non utilizzare i margini per quell'effetto. – Budius

+0

No .. mi stai sbagliando .. Voglio intestazione appiccicosa come Instagram, dove ogni riga ha un headerview che si attacca in cima fino a che l'oggetto non si scorre su ... – Pramod

Problemi correlati