34 votes

ListView Android : 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 que ne peut en contenir l'écran. Après avoir fait défiler la liste, j'ai besoin d'obtenir la position dans le modèle de données du premier élément visible de la liste.

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

Adapter comporte quelques fonctions, comme getItemId(position) qui semblait utile ; cependant, le SimpleAdapter La mise en œuvre renvoie juste la position transmise, et non un identifiant de ligne comme je l'espérais.

Une solution de force brute consisterait à obtenir la vue à l'indice 0 et à 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 d'une position particulière dans l'adaptateur.

Quelqu'un a une idée ?

90voto

Romain Guy Points 57114

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

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

1voto

varma Points 11
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
    }
});

Nous obtiendrons ainsi l'identifiant de l'élément de la liste parent.getSelectedItemId() ;

-1voto

Cyril Mottier Points 1037

Il suffit d'utiliser le getPositionForView(View) ( voir la documentation ). L'avantage principal de cette méthode est qu'elle fonctionne également avec les descendants View d'un article.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X