8

Ho una listview che è ovviamente scorrevole. Il listview contiene alcune domande sulla forma. Una volta che l'utente invia il modulo, mettiamo una vista personalizzata simile a un francobollo in cima al listview (e impediamo all'utente di rispondere alle domande, ma non importa qui).Android: Visualizzazione in cima a scroll di listview insieme alla listview

Il timbro dovrebbe apparire nella parte superiore del listview (come nella parte superiore dello schermo) ed essere scorrevole alla stessa velocità del listview, cioè dovrebbe scomparire quando l'elenco visualizza gli oggetti che erano inizialmente sotto di esso scompaiono in alto dello schermo quando si scorre.

Qualche idea su come raggiungere questo obiettivo?

risposta

6

ho trovato una soluzione. Non sono sicuro che sia troppo elegante, ma funziona così lascerà a meno che qualcuno non faccia qualcosa di meglio.

La vista che voglio scorrere insieme all'elenco è una vista personalizzata, che deve conoscere la vista elenco. Così ho Implementare un setListView (ListView listView) Metodo su di esso:

private int scrollY; //1 
private Map<Integer, Integer> listViewItemHeights = new Hashtable<>(); 
public void setListView(final ListView listView) { 
    listView.setOnScrollListener(new OnScrollListener() { //2 
     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) {} //3 

     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { //4 
      View c = listView.getChildAt(0); 
      if (c != null) { 
       int oldScrollY = scrollY; 
       scrollY = -c.getTop(); 

       listViewItemHeights.put(listView.getFirstVisiblePosition(), c.getHeight()); 
       for (int i = 0; i < listView.getFirstVisiblePosition(); ++i) { 
        if (listViewItemHeights.get(i) != null) 
         scrollY += listViewItemHeights.get(i); 
       } 
       scrollBy(0, scrollY - oldScrollY); 
      } 
     } 
    }); 
} 

Commento No.1: questa è una variabile avermi permesso di tenere traccia della posizione di scorrimento corrente.

Commento No.2: l'impostazione di un nuovo sul ascoltatore di scorrimento per lasciare che la mia vista personalizzata sapere quando la lista

Commento No.3: questo non ha bisogno di essere implementato in questo caso.

Commento n. 4: è qui che accade la magia. Nota alla fine Scorro la mia vista con scrollY - oldScrollY, lasciami iniziare prima con questo bit. oldScrollY è la posizione di scorrimento mantenuta, scrollY è la nuova. Ho bisogno di scorrere per la differenza tra loro. Per quanto riguarda il calcolo dello scrollY, vi rimando alla mia risposta qui: Android getting exact scroll position in ListView, è il modo in cui la posizione di scorrimento viene calcolata nella visualizzazione elenco.

5

per Vista schermo superiore è possibile aggiungere il layout headerview coustom modo legano come headerlayout di listview..so avete scorrere stessa ListView ...

View headerview = ((LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.track_footer_view, null, false); 
    listview.addHeaderView(headerview); 
+0

Ciao, grazie per la tua risposta. Ho bisogno che le righe in alto nella listview siano "timbrate", quindi non posso mettere quella vista nell'intestazione. – Maria

+0

si può acheving con la creazione di due layout personalizzati e per una prima positon.bind primo layout e secondo layout per tutto il resto .. quindi è necessario aggiungere il valore necessario in array ciò che si lega in baseadapter –

+0

Il fatto è che non è necessario vuoi che il timbro appaia in cima alla prima posizione. Le altezze delle file possono essere diverse nella mia lista e il francobollo può attraversare i primi tre o così. – Maria

Problemi correlati