2010-01-04 26 views
33

Tengo un Android ListView creado con un SimpleAdapter que tiene más elementos que caben en la pantalla. Después de que la lista se haya desplazado, necesito obtener el puesto en el modelo de datos del primer elemento visible de la lista.Android ListView: obtener el índice de datos del elemento visible

Básicamente quiero una función como: listView.getChildAt(0).getPositionInDataModel().

Adapter tiene algunas funciones, como getItemId(position) que parecían útiles; sin embargo, la implementación SimpleAdapter simplemente devuelve la posición aprobada, no una identificación de fila como esperaba.

Una solución de fuerza bruta sería obtener la vista en el índice 0 y compararla con la vista de cada elemento del adaptador. Sin embargo, no parece haber una manera fácil de obtener la vista para una posición particular del adaptador.

¿Alguien tiene alguna idea?

Respuesta

90

Es muy fácil. Simplemente use ListView.getFirstVisiblePosition() + indexYouWant. Por ejemplo, para obtener la posición en el adaptador del segundo niño que se muestra en el ListView, simplemente use getFirstVisiblePosition() + 1.

No hay necesidad de todas las cosas de miedo se muestra en la anterior respuesta :)

+2

Guau, no puedo creer que me haya perdido eso. Estaba buscando una función como esa. Debe haber sido porque está definido en una clase para padres donde no lo esperaba. Todavía me estoy acostumbrando a este estilo de javadoc ... ¡Gracias por señalarlo! –

+0

@RomainGuy, guardó mi rendimiento de ListView ... –

+0

Algunas de las vistas entre getFirstVisiblePosition() y getLastVisiblePosition() devuelven nulo en mi Gridview. Estoy reciclando las vistas, ¿es esa la causa? Esperaría que las vistas visibles estuvieran garantizadas para no ser nulas, especialmente porque puedo ver que no lo son. – Laurent

1
listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
{ 
    public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) 
    { 
     AisleId= parent.getSelectedItemId(); 
    } 
    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 
     // TODO Auto-generated method stub 
    } 
}); 

En este vamos a obtener la lista de ID de elemento parent.getSelectedItemId();

-1

Simplemente use el getPositionForView(View) (see documentation). La principal ventaja de este método es que también funciona con el descendiente View s de un artículo.

+1

¿Por qué se bajó este voto? ¿No funciona? –

+0

Simplemente no responde la pregunta –

Cuestiones relacionadas