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.
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
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 –
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