ListView за допомогою OnItemClickListener


77

Я використовую звичай ListViewз RatingBarі ImageButton. Ось моя проблема: Коли я натискаю на мій ListView, мій OnItemClickListenerне працює. Будь ласка, може хто-небудь мені допомогти. Код:

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

будь-ласка, додайте код. А чому не працює? Помилка?
Іван

я не отримую жодної помилки, навіть якщо я налагоджую, і вона не заходить всередину .. я розміщу якийсь код.
NikhilReddy

1
@gujjula nikhilreddy Розмістіть якийсь Кодекс.
Venky

3
Я вже перевіряв цю проблему раніше. <br/> Перегляньте мою статтю, щоб знайти причини та шляхи вирішення: xjaphx.wordpress.com/2011/07/14/… <br/> Думаю, ви зустрічаєтесь із сценарієм 3.
Піт Х'юстон,

1
Відповідь я знайшов у цьому дописі, перший коментар: stackoverflow.com/questions/5551042/…
Карлос Еспіноза

Відповіді:


125

Хоча це дуже давнє запитання, але я все ще публікую відповідь на нього, щоб це могло комусь допомогти. Якщо ви використовуєте будь-який макет всередині подання списку, використовуйте ...

android:descendantFocusability="blocksDescendants"    

... на першому батьківському макеті у списку. Це працює як магія. Клацання не буде спожито жодним елементом у списку, а безпосередньо перейде до елемента списку.


2
Приголомшливо Це дуже допомогло
Gokhan Arik

1
У мене це спрацювало. Коли я додав вище властивість, клацання по списку, а також клацання на кнопці обидва працюють. Дякую.
Raghuveer

1
Чудово !! відповідь .. На ура :)
swiftBoy

Дякую. Я розробляю програми для Android з 3 років. ніколи не думав, що цей простий трюк працює.
Венкат Віней,

Я застряг з однією і тією ж проблемою протягом цілого дня .. Велике спасибі ... Ніколи б не здогадався про це
Jitendra Sawant

18

Гей, перевірте це, це працює для мене ... сподіваюся, це буде працювати і для вас

Якщо елемент списку містить ImageButton

Проблема: OnItemClickListenerпросто взагалі не відповідає!

Причина: Поняття не маю

Рішення: у коді встановіть ImageButtonфокус на“false”

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

2: button.setFocusable(false);


1
Врятував моє життя. Дякую
Дарко Петковський

18

У мене є Activity, яка розширює ListActivity.

Я спробував зробити щось подібне в 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?");

    }

});

Але це не спрацювало.

Натомість мені просто потрібно було перевизначити onListItemClick:

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

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

}

12

Якщо ви хочете увімкнути елемент, натисніть у вікні списку використання

listitem.setClickable(false);

на перший погляд це може здатися неправильним, але це працює!


1
Якщо ви робите це в XML, переконайтеся, що фактичний дочірній (не батьківський макет) не можна натискати. Також ця відповідь повинна бути вищою!
Гамбург приємний

10

якщо подання елемента списку містить кнопку, прапорець або кнопку зображення, onitemclicklistener і onitemlongclicklistener не працюють, оскільки вони мають власний прослуховувач onclick.

встановити фокусування як хибне

holder.button.setFocusable(false);

9

1) Перевірте, чи використовуєте ви OnItemClickListener або OnClickListener (що не підтримується для ListView)
Документація Розробники Android ListView

2) Перевірте, чи правильно ви додали слухач до вашого ListView. Він підключений до ListView, а не до ListAdapter!

ListView.setOnItemClickListener(listener);

3) Якщо вам потрібно скористатися OnClickListener, перевірте, чи використовуєте ви, DialogInterface.OnClickListenerабо View.OnClickListener(їх можна легко обміняти, якщо не перевірено або якщо використовуються обидва)


код, який я використовую, я розширюю список. ось мій codeListView 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_how. ();}}); }
NikhilReddy

5

Ви також можете використовувати lambda. Лямбда-синтаксис не підтримується в Java 1.7 або старіших JVM.

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

4

setClickable як false для ImageButton, як це

imagebutton.setClickable(false);

а потім виконайте OnItemClickListenerдля перегляду списку.


4

Якщо ви визначаєте свій ListView програмно:

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

На Java, як пропонують інші

listitem.setClickable(false);

Або в xml:

android:clickable="false"

Це працює дуже добре


1

Чи є зображення та зображення у поданні списку, яке ви використовуєте>, потім перейдіть за посиланням: http://vikaskanani.wordpress.com/2011/07/20/android-custom-image-gallery-with-checkbox-in-grid- вибрати-декілька /

Думаю, коли ви працюєте за посиланням, яке я надав спочатку, кожна річ буде працювати нормально, я це спробував. Якщо ви хочете уточнити відповідь, будь ласка, розробіть питання з кодом та описом.


1

Просто вставте рядок у RatingBar:

android:isIndicator="true"

У XML панель оцінок виглядає так.

<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 конфліктує з OnClickListener елементів рядка перегляду списку в адаптері. Потрібно лише переконатися, що ваш код добре керований та правильно написаний відповідно до стандартів.

Перевірте відповідь за посиланням нижче:

Зробіть список доступним для натискання



0

Найпростіше рішення і найпростіший спосіб, який я можу надати, - це. Вам просто потрібно виконати ці два кроки.

1. додайте це у свій XML-файл.

    <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. Додайте це у свій файл MainActivity.

        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

На запитання багатьох, діти у списку не повинні мати ширину "match_parent", якщо ви шукаєте лише перегляд списку, клацніть.

Навіть якщо ви встановите для параметра "Фокусований" значення false, це не спрацює. Встановіть для Width дитини значення wrap_content

<TextView
    android:id="@+id/itemchild"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    ...
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.