Ich benutze einen Brauch ListView
mit RatingBar
und ImageButton
. Hier ist mein Problem: Wenn ich auf meine ListView
klicke OnItemClickListener
, funktioniert meine nicht. Bitte kann mir jemand helfen. 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();
}
});
Antworten:
Obwohl eine sehr alte Frage, aber ich poste immer noch eine Antwort darauf, damit es jemandem helfen kann. Wenn Sie ein Layout in der Listenansicht verwenden, verwenden Sie ...
android:descendantFocusability="blocksDescendants"
... im ersten übergeordneten Layout innerhalb der Liste. Dies funktioniert wie von Zauberhand. Der Klick wird von keinem Element in der Liste verbraucht, sondern geht direkt zum Listenelement.
quelle
Ich habe eine Aktivität, die ListActivity erweitert.
Ich habe versucht, so etwas in onCreate zu tun:
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?"); } });
Aber das hat nicht funktioniert.
Stattdessen musste ich einfach onListItemClick überschreiben:
@Override protected void onListItemClick(ListView l, View v, int position, long id) { Log.i("Hello!", "Clicked! YAY!"); }
quelle
Hey, überprüfe das, funktioniert für mich ... hoffe, es funktioniert auch für dich
Wenn Listenelement enthält
ImageButton
Problem:
OnItemClickListener
antwortet einfach überhaupt nicht!Grund: Keine Ahnung
Lösung: Setzen Sie im Code den
ImageButton
Fokus auf“false”
1:
ImageButton button = (ImageButton) convertView.findViewById(R.id.imageButton);
2:
button.setFocusable(false);
quelle
Wenn Sie das Element aktivieren möchten, klicken Sie in der Listenansicht auf
listitem.setClickable(false);
Das mag auf den ersten Blick falsch erscheinen, aber es funktioniert!
quelle
Wenn die Listenelementansicht eine Schaltfläche, ein Kontrollkästchen oder eine Bildschaltfläche enthält, funktionieren der onitemclicklistener und der onitemlongclicklistener nicht, da sie über einen eigenen onclick-Listener verfügen.
setze fokussierbar als falsch
holder.button.setFocusable(false);
quelle
1) Überprüfen Sie, ob Sie OnItemClickListener oder OnClickListener (für ListView nicht unterstützt) verwenden.
Dokumentation Android Developers ListView
2) Überprüfen Sie, ob Sie Listener ordnungsgemäß zu Ihrer ListView hinzugefügt haben. Es ist an ListView gebunden, nicht an ListAdapter!
ListView.setOnItemClickListener(listener);
3) Wenn Sie OnClickListener verwenden müssen, überprüfen Sie, ob Sie
DialogInterface.OnClickListener
oder verwendenView.OnClickListener
(sie können einfach ausgetauscht werden, wenn sie nicht validiert sind oder beide verwenden).quelle
Sie können auch verwenden
lambda
. Die Lambda-Syntax wird unter Java 1.7 oder früheren JVMs nicht unterstützt.listView.setOnItemClickListener((parent, view, position, id) -> { ... });
quelle
setClickable als false für ImageButton wie folgt
imagebutton.setClickable(false);
und dann
OnItemClickListener
zur Listenansicht ausführen .quelle
Wenn Sie Ihre ListView programmgesteuert definieren:
mListView.setDescendantFocusability(ListView.FOCUS_BLOCK_DESCENDANTS);
quelle
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(); } };
quelle
In Java wie andere vorschlagen
listitem.setClickable(false);
Oder in XML:
android:clickable="false"
Es funktioniert sehr gut
quelle
Befindet sich ein Bild in der Listenansicht, die Sie verwenden, folgen Sie dem Link: http://vikaskanani.wordpress.com/2011/07/20/android-custom-image-gallery-with-checkbox-in-grid- Mehrfachauswahl /
Ich denke, wenn Sie an dem Link arbeiten, den ich zuerst bereitgestellt habe, wird alles gut funktionieren, das habe ich versucht. Wenn Sie eine verfeinerte Antwort wünschen, erläutern Sie die Frage bitte mit Code und Beschreibung.
quelle
Fügen Sie einfach die Zeile in die Bewertungsleiste ein:
android:isIndicator="true"
In XML sieht die Bewertungsleiste so aus.
<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" />
quelle
Android OnItemClickLIstener steht in Konflikt mit dem OnClickListener von Elementen der Zeile der Listenansicht im Adapter. Sie müssen nur sicherstellen, dass Ihr Code gut verwaltet und ordnungsgemäß mit Standards geschrieben ist.
Überprüfen Sie die Antwort unter dem unten angegebenen Link:
Liste anklickbar machen
quelle
lv.setOnItemClickListener( new OnItemClickListener() { @Override public void onItemClick(AdapterView < ? > parent, View view, int position, long id) { // TODO Auto-generated method stub } } );
quelle
Die einfachste und einfachste Lösung, die ich anbieten kann, ist diese. Sie müssen nur diese beiden Schritte ausführen.
1. Fügen Sie dies in Ihre XML-Datei ein.
<ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:id="@+id/list_view" android:layout_below="@+id/info_text" />
ListView listView; listView = findViewById(R.id.list_view); String[] fruits = new String[5]; fruits[0]="hello"; fruits[1]="hello"; fruits[2]="hello"; fruits[3]="hello"; fruits[4]="hello"; List newList = new ArrayList(Arrays.asList(fruits)); ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, newList); listView.setAdapter(arrayAdapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { String selectedItem = (String) parent.getItemAtPosition(position); Toast.makeText(DisplayPannel.this, selectedItem, Toast.LENGTH_SHORT).show(); } });
quelle
Von vielen gefragt, dürfen die Kinder in der Liste nicht die Breite "match_parent" haben, wenn Sie nur nach Listenansicht suchen.
Selbst wenn Sie "Focusable" auf "false" setzen, funktioniert dies nicht. Setzen Sie die Breite des Kindes auf wrap_content
<TextView android:id="@+id/itemchild" android:layout_width="wrap_content" android:layout_height="wrap_content" ...
quelle