252 votes

OnItemCLickListener ne fonctionne pas dans listview ANDROID

Voici le code du cours d'activité

 conversationList = (ListView)findViewById(android.R.id.list);
ConversationArrayAdapter conversationArrayAdapter=new  ConversationArrayAdapter(this, R.layout.conversation_list_item_format_left, conversationDetails);
conversationList.setAdapter(conversationArrayAdapter);
conversationList.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
        Log.d("test","clicked");
    }
});
 

Voici le code de la fonction getView de la classe d'adaptateur

 if (v == null) {                                
    LayoutInflater vi = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if(leftSideMessageNumber.equals(m.getTo())) {
        v = vi.inflate(R.layout.conversation_list_item_format_left, null);
    } else {
        v = vi.inflate(R.layout.conversation_list_item_format_right, null);
    }
}
 

Y a-t-il un problème pour utiliser 2 xml tout en gonflant ... toute aide est appréciée ....

750voto

sunshine Points 3779

Je viens de trouver la solution d'ici .. mais en cliquant profondément ...

Si un élément de ligne de la liste contient une vue pouvant être mise au point ou cliquable, OnItemClickListener ne fonctionnera pas.

L'élément de ligne doit avoir un paramètre comme android:descendantFocusability="blocksDescendants" .

Vous pouvez voir ici comment votre élément de liste devrait ressembler

row_item.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:descendantFocusability="blocksDescendants"
android:gravity="center_vertical" >

// your other widgets here

</LinearLayout>
 

96voto

krazyrobot Points 2273

Le problème est que vos mises en page contiennent des éléments pouvant être mis au point ou cliquables. Si une vue contient un élément pouvant être focalisé ou cliqué, OnItemCLickListener ne sera pas appelé.

Cliquez ici pour plus d'informations.

Merci de poster un de vos fichiers XML si ce n’est pas le cas.

72voto

Janene Pappas Points 596

Pour mes listes, il est possible de cliquer sur mes lignes, comme les boutons, et de faire une couverture de blocsDescendants ne fonctionne pas. Au lieu de cela, j'ajoute une ligne dans le fichier XML du bouton:

     android:focusable="false"
 

Cela empêche les boutons de bloquer les clics sur les lignes, mais permet également aux boutons de prendre les clics.

22voto

Milan Shukla Points 549

utiliser le code ci-dessous à l'intérieur de la balise de bouton dans la disposition des lignes personnalisées de listview

  android:focusable="false"
 android:clickable="false"
 

18voto

Woody Points 251

J'ai eu le même problème et j'ai juste vu que j'avais accidentellement réglé:

 @Override
public boolean isEnabled(int position)
{
    return false;
}
 

sur ma classe CustomListViewAdapter.

En changeant cela en:

 return true;
 

J'ai réussi à résoudre le problème. Juste au cas où quelqu'un aurait fait la même erreur ...

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