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!
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.
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);
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!");
}
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!
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);
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)
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) -> {
...
});
setClickable comme false pour ImageButton comme ceci
imagebutton.setClickable(false);
puis effectuez OnItemClickListener
dans listview.
Si vous définissez votre ListView par programme:
mListView.setDescendantFocusability(ListView.FOCUS_BLOCK_DESCENDANTS);
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();
}
};
Dans Java comme d'autres le suggèrent
listitem.setClickable(false);
Ou en xml:
Android:clickable="false"
Ça marche très bien
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" />
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:
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.
lv.setOnItemClickListener( new OnItemClickListener() {
@Override
public void onItemClick(AdapterView < ? > parent, View view,
int position, long id) {
// TODO Auto-generated method stub
}
} );