web-dev-qa-db-fra.com

Android ListView: obtenir l'index des données de l'élément visible

J'ai un Android ListView créé avec un SimpleAdapter qui contient plus d'éléments qu'il n'en tient à l'écran. Après avoir fait défiler la liste, je dois obtenir la position dans le modèle de données du premier élément visible de la liste.

Fondamentalement, je veux une fonction comme: listView.getChildAt(0).getPositionInDataModel().

Adapter contient quelques fonctions, comme getItemId(position) qui semblait utile; cependant, l'implémentation SimpleAdapter renvoie simplement la position passée, pas un identifiant de ligne comme je l'espérais.

Une solution de force brute serait d'obtenir la vue à l'index 0 et de la comparer à la vue de chaque élément de l'adaptateur. Cependant, il ne semble pas y avoir de moyen facile d'obtenir la vue pour une position particulière de l'adaptateur.

Quelqu'un a des pensées?

34
Cheryl Simon

C'est très facile. Utilisez simplement ListView.getFirstVisiblePosition() + indexYouWant. Par exemple, pour obtenir la position dans l'adaptateur du 2ème enfant affiché dans le ListView, il suffit d'utiliser getFirstVisiblePosition() + 1.

Pas besoin de tous les trucs effrayants montrés dans la réponse ci-dessus :)

90
Romain Guy
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
    }
});

Dans cela, nous obtiendrons l'ID de l'élément de liste parent.getSelectedItemId ();

1
varma