2013-08-12 16 views
5

Ho un controllo ListView con HeaderView.Crea vista intestazione (non intestazione sezione) di ListView Attacca in cima

Voglio una delle viste nel HeaderView da attaccare in cima.

Ho visto molti esempi per intestazioni di sezioni adesive.

Ho anche guardato StickyScrollViewItems ma poiché sto usando un ListView, non posso usare un ScrollView.

È disponibile una libreria per questo o devo semplicemente ignorare lo OnScrollListener dello ListView?

Grazie.

+0

Puoi mostrare il codice che stai cercando e indicare quale sia il risultato corrente? Se stai usando 'addHeaderView (v)' e li aggiungi nell'ordine corretto, non dovrebbe esserci un problema. – codeMagic

+0

@codeMagic Ho appena guardato le librerie che ho menzionato. Ho usato addHeaderView ma non riesco a capire come renderlo stick. Gli esempi sono per le intestazioni di sezione non HeaderView per ListView. – dannyroa

risposta

1

Non conosco nessuna libreria che ti permetta di fare ciò ma quello che faccio per un'intestazione è usare un RelativeLayout per il mio xml che avrà il ListView. Quindi creare la visualizzazione dell'intestazione tuttavia si desidera e dare la proprietà

android:layout_alignParentTop="true" 

poi dare il tuo ListView

android:layout_below="@id/idOfHeaderView 

Questo è il modo più semplice che conosco per attraccare una vista intestazione nella parte superiore. Ha funzionato per me ogni volta. Spero che aiuti.

+1

Grazie per la risposta. Credo che il mio post non fosse chiaro. Ho 3 viste allineate verticalmente nel mio HeaderView. Voglio solo la terza vista da incollare. – dannyroa

+0

Vedo. Sembra un po 'strano ma forse non capisco cosa stai facendo esattamente. Non puoi avere la 3a vista essere la prima e restare in cima e avere i due sotto che si muovono con il 'ListView'? – codeMagic

+0

Sfortunatamente, non può essere la prima vista. Quindi la mia soluzione alternativa è di inserire la terza vista in un'intestazione di sezione che viene visualizzata solo nel primo elemento di ListView. – dannyroa

1

Ho appena scritto un carico di codice che fa questo che non posso condividere per ragioni contrattuali. In pratica, seguire l'approccio delineato here e applicare a un listview anziché a una vista di scorrimento.

punti principali sono

  1. creare una vista involucro che contiene il galleggiante/intestazione appiccicoso e il vostro ListView come fratelli
  2. utilizzare un metodo proxy durante l'aggiunta di intestazioni con un booleano isSticky - se è appiccicoso quindi aggiungere un falso intestazione vuota al listview della stessa dimensione e la tua intestazione vista al wrapper di intestazione mobile (usa un layout relativo qui)
  3. Imposta un listener di scroll del listview che tiene traccia della posizione del px superiore della vista di intestazione fittizia nel elenca e imposta questo come margine superiore dell'intestazione mobile che si trova all'interno di un re Layout lative
  4. gestire tutti i casi limite fastidioso/OEM Overscroll merda per farlo funzionare in tutte le situtions (come this per Samsung)

Ricordate di impostare la posizione iniziale del galleggiante intestazione/appuntato dopo la listview è stato steso.

mi sento proprio un po 'coinvolto e si senta qualche ritocco per ottenere di destra - questo è un momento in cui invidio iOS e qualsiasi iOS sviluppatori penserò tua Slacking come ci vuole un po' per l'attuazione: D

Tutto il Le librerie aperte disponibili al momento della scrittura utilizzano le visualizzazioni di scorrimento o le intestazioni di visualizzazione di elenchi.Questo problema con questi approcci è che le viste delle liste riciclavano (quindi a differenza delle viste di scorrimento non puoi semplicemente mantenere un riferimento alla vista fittizia) e anche le librerie correnti sembrano duplicare le viste appiccicose usando i metodi dell'adattatore getView e così via - il che non va bene per viste dell'intestazione della vista elenco dinamico in quanto non vengono riciclate e possono avere solo un genitore, quindi la riparazione sarebbe fastidiosa (e nel mio caso ha un sacco di funzionalità quindi non desidero creare due viste dello stesso tipo e calzare le librerie correnti per adattare le mie soluzioni)

+0

Mi piacerebbe davvero che tu potessi condividere il tuo codice ma la spiegazione funziona per me. Sembra che il mio lavoro sia perfetto per me. – frostymarvelous

+0

Mi sento per te - solo convincere il cliente a non farlo;) – Dori

+0

Diciamo solo che questo è un client estremamente ben pagato. :) – frostymarvelous

Problemi correlati