ListView mit OnItemClickListener


75

Ich benutze einen Brauch ListViewmit RatingBarund ImageButton. Hier ist mein Problem: Wenn ich auf meine ListViewklicke 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();
    }
});

Bitte fügen Sie einen Code hinzu. Und warum funktioniert das nicht? Ein Fehler?
Ivan

Ich erhalte keine Fehler, auch wenn ich debugge, es geht auch nicht hinein. Ich werde einen Code posten.
NikhilReddy

1
@gujjula nikhilreddy Poste einen Code.
Venky

3
Ich habe dieses Problem bereits zuvor überprüft. <br/> Überprüfen Sie meinen Artikel, um Ursachen und Lösungen zu finden: xjaphx.wordpress.com/2011/07/14/… <br/> Ich denke, Sie treffen Szenario 3.
Pete Houston

1
Ich fand die Antwort in diesem Beitrag, dem ersten Kommentar: stackoverflow.com/questions/5551042/…
Carlos Espinoza

Antworten:


122

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.


2
Genial. Es hat sehr geholfen
Gokhan Arik

1
Es hat bei mir funktioniert. Wenn ich die obige Eigenschaft hinzugefügt habe, funktionieren sowohl der Listenklick als auch der Knopfklick. Beide funktionieren. Vielen Dank.
Raghuveer

1
Toll!! Antwort .. Prost :)
SwiftBoy

Vielen Dank. Ich habe Android Apps seit 3 ​​Jahren entwickelt. Ich hätte nie gedacht, dass dieser einfache Trick funktioniert.
Venkat Vinay

Wurde für einen ganzen Tag mit dem gleichen Problem stecken .. Vielen Dank ... Nie hätte es erraten
Jitendra Sawant

18

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!");

}

17

Hey, überprüfe das, funktioniert für mich ... hoffe, es funktioniert auch für dich

Wenn Listenelement enthält ImageButton

Problem: OnItemClickListenerantwortet einfach überhaupt nicht!

Grund: Keine Ahnung

Lösung: Setzen Sie im Code den ImageButtonFokus auf“false”

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

2: button.setFocusable(false);


1
Hat mein Leben gerettet. Vielen Dank
Darko Petkovski

11

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!


10

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);

9

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.OnClickListeneroder verwenden View.OnClickListener(sie können einfach ausgetauscht werden, wenn sie nicht validiert sind oder beide verwenden).


Der Code, den ich benutze, hat eine Listaktivität erweitert. hier ist mein codeListView lv = getListView (); setContentView (lv); lv.setOnItemClickListener (neuer OnItemClickListener () {@Override public void onItemClick (AdapterView <?> arg0, View arg1, int position, long arg3) {Toast.makeText (SuggestionActivity.this, "" + position, Toast.LENGTH_HORT) ();}}); }
NikhilReddy

5

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) -> {
    ...
});

4

setClickable als false für ImageButton wie folgt

imagebutton.setClickable(false);

und dann OnItemClickListenerzur Listenansicht ausführen .


4

Wenn Sie Ihre ListView programmgesteuert definieren:

mListView.setDescendantFocusability(ListView.FOCUS_BLOCK_DESCENDANTS);

4
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();
    }
};

2

In Java wie andere vorschlagen

listitem.setClickable(false);

Oder in XML:

android:clickable="false"

Es funktioniert sehr gut



1

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" />

1

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


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

    }
} );

0

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"
        />

  1. Fügen Sie dies in Ihre MainActivity-Datei ein.

        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();            }
        });


0

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"
    ...
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.