ListView z onitemclicklistener android

Używam niestandardowego ListView z RatingBar i ImageButton. Oto mój problem: kiedy klikam na my ListView, my OnItemClickListener nie działa. Proszę, czy ktoś może mi pomóc. Kod:

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

Z góry dzięki!

Author: Charuක, 2011-10-04

15 answers

Choć bardzo stare pytanie, ale nadal zamieszczam na nie ODPOWIEDŹ, aby mogło komuś pomóc. Jeśli używasz dowolnego układu wewnątrz widoku listy, użyj ...

android:descendantFocusability="blocksDescendants"    

... na pierwszym układzie nadrzędnym wewnątrz listy. To działa jak magia kliknięcie nie zostanie zużyte przez żaden element wewnątrz listy, ale będzie bezpośrednio przejść do elementu listy.

 109
Author: Shaista Naaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-24 09:44:43

Hej, sprawdź to, działa dla mnie... hope it work for u too

Jeśli pozycja listy zawiera ImageButton

Problem: OnItemClickListener po prostu w ogóle nie odpowie!

Powód: brak pomysłu

Rozwiązanie: w kodzie ustaw ostrość ImageButton na “false”

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

2: button.setFocusable(false);

 17
Author: Grv9098,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-20 20:07:45

Mam działanie, które rozszerza ListActivity.

Próbowałem zrobić coś takiego w 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?");

    }

});
Ale to nie zadziałało.

Zamiast tego po prostu musiałem obejść onListItemClick:

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

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

}
 10
Author: poshaughnessy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-25 11:18:26

Jeśli widok pozycji listy zawiera przycisk lub checkbox lub imagebutton, onitemclicklistener i onitemlongclicklistener nie działają ze względu na to ma własny słuchacz onclick.

Ustaw fokus jako false

holder.button.setFocusable(false);
 10
Author: RVG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-16 09:53:43

Jeśli chcesz włączyć pozycję Kliknij w widoku listy użyj

listitem.setClickable(false);

To może wydawać się złe na pierwszym miejscu, ale to działa!

 9
Author: Rahul Tiwari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-16 14:13:30

1) Sprawdź, czy używasz OnItemClickListener lub OnClickListener (który nie jest obsługiwany dla ListView)
dokumentacja Android Developers ListView

2) Sprawdź, czy poprawnie dodałeś Listener do ListView. Jest podłączony do ListView, a nie do ListAdapter!

ListView.setOnItemClickListener(listener);

3) jeśli potrzebujesz użyć OnClickListener, sprawdź, czy używasz DialogInterface.OnClickListener lub View.OnClickListener (można je łatwo wymienić, jeśli nie są zwalidowane lub jeśli używasz obu)

 8
Author: Marek Sebera,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-04 09:41:58

SetClickable as false to ImageButton like this

imagebutton.setClickable(false);

A następnie wykonaj OnItemClickListener do listview.

 4
Author: Ramakrishna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-04 09:45:32

Jeśli zdefiniujesz program ListView:

mListView.setDescendantFocusability(ListView.FOCUS_BLOCK_DESCENDANTS);
 4
Author: jmaculate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-25 15:49:49

Możesz również użyć "lambda", składnia Lambda nie jest obsługiwana w Javie 1.7 lub wcześniejszych systemach JVMs.

    listView.setOnItemClickListener((parent, view, position, id) -> {

    });
 4
Author: bheatcoker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-03 14:31:23
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
Author: tsiftis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-19 10:53:28

W Javie jak inne sugestie

listitem.setClickable(false);

Lub w xml:

android:clickable="false"

To działa bardzo dobrze

 2
Author: V. Kalyuzhnyu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-07 07:27:11

Czy jest i obrazek w widoku listy, którego używasz> następnie kliknij link: http://vikaskanani.wordpress.com/2011/07/20/android-custom-image-gallery-with-checkbox-in-grid-to-select-multiple/

Myślę, że kiedy ćwiczysz na linku, który podałem najpierw wszystko będzie działać dobrze, próbowałem tego. Jeśli chcesz uzyskać dokładną odpowiedź, rozwiń pytanie z kodem i opisem.

 1
Author: DAS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-04 09:54:26

Po prostu Wstaw linię do Ratingbara:

android:isIndicator="true"

W XML Pasek ocen wygląda tak.

<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
Author: Abhishek Majumdar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-09 19:40:35
lv.setOnItemClickListener(new OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // TODO Auto-generated method stub

        }
    });
 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-28 19:40:01

Android onitemclicklistener koliduje z onclicklistener pozycji wiersza listview w adapterze. Musisz tylko upewnić się, że Twój kod jest dobrze zarządzany i poprawnie napisany przy użyciu standardów.

Sprawdź odpowiedź w linku podanym poniżej:

Utwórz listę klikalną

 1
Author: Zohaib Hassan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:35