2011-10-28 5 views
7

C'è un modo per trovare l'altezza di un oggetto di ListView attualmente visualizzato nell'elenco senza impostarlo nei file xml di layout?Android: trovare l'altezza di rendering dell'articolo di ListView

Ho provato

View listItem = listAdapter.getView(currentIndex, null, listView); 
listItem.measure(MeasureSpec.EXACTLY, MeasureSpec.UNSPECIFIED); 
int itemHeight = listItem.getMeasuredHeight(); 

e mentre ha funzionato inizialmente, ha deciso di un'eccezione Null Pointer durante la misura chiamata() dopo l'avvio di una nuova sessione di emulazione.

Quello che sto tentando di fare è avere un elemento in una breve lista (solo 2 o 3 elementi interi sono visibili) essere centrato quando selezionato dal programma.

+0

Aggiungere l'errore nella sua interrogazione. Penso che 'listAdapter.getView (currentIndex, null, listView)' restituisce null. Poiché listItem è null, ottieni NullPointerException quando chiami 'listItem.measure()'. –

+0

Stai utilizzando un adattatore personalizzato? Forse è meglio eseguire questa misura dall'adattatore personalizzato, poiché l'altezza viene calcolata subito dopo che la vista è stata disegnata. –

risposta

0

questo ha funzionato per me:

public static int getItemViewHeight(Context context, Adapter adapter, int index) { 
    FrameLayout fakeParent = new FrameLayout(context); 
    View view = adapter.getView(index, null, fakeParent); 
    view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); 
    return view.getMeasuredHeight(); 
}