web-dev-qa-db-fra.com

ListView avec OnItemClickListener android

J'utilise une personnalisation ListView avec RatingBar et ImageButton. Voici mon problème: lorsque je clique sur mon ListView, mon OnItemClickListener ne fonctionne pas. S'il vous plaît, quelqu'un peut-il m'aider? Code:

ListView lv = getListView();
setContentView(lv);
lv.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
        Toast.makeText(SuggestionActivity.this, "" + position, Toast.LENGTH_SHORT).show();
    }
});

Merci d'avance!

70
NikhilReddy

Bien que ce soit une très vieille question, mais je poste toujours une réponse à cette question afin que cela puisse aider quelqu'un. Si vous utilisez une disposition dans la vue liste, utilisez ...

Android:descendantFocusability="blocksDescendants"    

... sur le premier modèle parent de la liste. Cela fonctionne comme par magie, le clic ne sera pas utilisé par un élément de la liste, mais ira directement à l'élément de la liste.

115
Shaista Naaz

Hey, vérifie ça, ça marche pour moi ... espérons que ça marche pour toi aussi

Si l'élément de la liste contient ImageButton

Problème: OnItemClickListener ne répond simplement pas du tout!

Raison: aucune idée

Solution: dans le code, définissez le focus de ImageButton sur “false”

1: ImageButton button = (ImageButton) convertView.findViewById(R.id.imageButton);

2: button.setFocusable(false);

17
Grv9098

J'ai une activité qui étend ListActivity.

J'ai essayé de faire quelque chose comme ça dans onCreate:

ListView listView = getListView();
listView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {

        Log.i("Hello!", "Y u no see me?");

    }

});

Mais ça n'a pas marché.

Au lieu de cela, je devais simplement remplacer onListItemClick:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {

    Log.i("Hello!", "Clicked! YAY!");

}
13
poshaughnessy

Si vous voulez activer le clic d’élément en mode liste, utilisez

listitem.setClickable(false);

cela peut sembler faux au premier abord mais ça marche!

10
Rahul Tiwari

si la vue d'élément de liste contient un bouton, une case à cocher ou une imageBox, onitemclicklistener et onitemlongclicklistener ne fonctionnent pas car ils possèdent leur propre écouteur onclick.

mis au point comme faux

holder.button.setFocusable(false);
10
RVG

1) Vérifiez si vous utilisez OnItemClickListener ou OnClickListener (ce qui n'est pas pris en charge pour ListView)
Documentation Android Liste des développeurs

2) Vérifiez si vous avez correctement ajouté Listener à votre ListView. C'est accroché sur ListView pas sur ListAdapter!

ListView.setOnItemClickListener(listener);

3) Si vous devez utiliser OnClickListener, vérifiez si vous utilisez DialogInterface.OnClickListener ou View.OnClickListener _ (ils peuvent être facilement échangés s'ils ne sont pas validés ou s'ils sont utilisés tous les deux)

8
Marek Sebera

Vous pouvez également utiliser lambda. La syntaxe Lambda n'est pas prise en charge sous les JVM Java 1.7 ou antérieures.

listView.setOnItemClickListener((parent, view, position, id) -> {
    ...
});
5
bheatcoker

setClickable comme false pour ImageButton comme ceci

imagebutton.setClickable(false);

puis effectuez OnItemClickListener dans listview.

4
Ramakrishna

Si vous définissez votre ListView par programme:

mListView.setDescendantFocusability(ListView.FOCUS_BLOCK_DESCENDANTS);
4
jmaculate
listPaired = (ListView) findViewById( R.id.listView1 );
listPairedData = new ArrayList < String >();
araPaired = new ArrayAdapter( this, Android.R.layout.simple_list_item_1, listPairedData );
listPaired.setAdapter( araPaired );
listPaired.setOnItemClickListener( listPairedClickItem );

private OnItemClickListener listPairedClickItem = new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView < ? > arg0, View arg1, int arg2, long arg3) {

        String info = ( (TextView) arg1 ).getText().toString();
        Toast.makeText( getBaseContext(), "Item " + info, Toast.LENGTH_LONG ).show();
    }
};
3
tsiftis

Dans Java comme d'autres le suggèrent

listitem.setClickable(false);

Ou en xml:

Android:clickable="false"

Ça marche très bien

2
Vlad

Insérez simplement la ligne dans RatingBar:

Android:isIndicator="true"

En XML, la barre de notation ressemble à ceci.

<RatingBar
    Android:id="@+id/ratingBar"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_marginLeft="6dp"
    Android:isIndicator="true"
    Android:clickable="false"
    Android:focusable="false"
    Android:focusableInTouchMode="false" />
1

Android OnItemClickLIstener entre en conflit avec OnClickListener d'éléments de la rangée de listview dans Adapter. Vous devez juste vous assurer que votre code est bien géré et écrit correctement avec des standards.

Vérifiez la réponse dans le lien donné ci-dessous:

Rendre la liste cliquable

1
Zohaib Hassan

Existe-t-il une image dans la liste affichée que vous utilisez>, puis suivez le lien: http://vikaskanani.wordpress.com/2011/07/20/Android-custom-image-gallery-with-checkbox- dans la grille pour sélectionner multiple /

Je pense que lorsque vous travaillez sur le lien que j'ai fourni, tout va bien se passer, j'ai déjà essayé. Si vous souhaitez une réponse plus précise, veuillez élaborer la question avec le code et la description.

1
DAS
lv.setOnItemClickListener( new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView < ? > parent, View view,
                            int position, long id) {
        // TODO Auto-generated method stub

    }
} );
1
user3977776