it-swarm.com.ru

ListView с OnItemClickListener android

Я использую пользовательские 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();
    }
});

Заранее спасибо!

69
gujjula nikhilreddy

Хотя это очень старый вопрос, но я все еще публикую ответ на него, чтобы он мог кому-то помочь. Если вы используете какой-либо макет внутри списка, используйте ...

Android:descendantFocusability="blocksDescendants"    

... на первом родительском макете внутри списка. Это работает как по волшебству, щелчок не будет потребляться никаким элементом внутри списка, но будет напрямую переходить к элементу списка.

115
Shaista Naaz

Эй, проверьте это, работает для меня ... надеюсь, это работает для вас тоже

Если элемент списка содержит ImageButton

Проблема: OnItemClickListener просто не отвечает вообще!

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

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

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

2: button.setFocusable(false);

17
Grv9098

У меня есть активность, которая расширяет 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!");

}
13
poshaughnessy

Если вы хотите включить элемент нажмите в представлении списка используйте

listitem.setClickable(false);

это может показаться неправильным на первый взгляд, но это работает!

10
Rahul Tiwari

если представление элемента списка содержит кнопку или флажок или кнопку изображения, onitemclicklistener и onitemlongclicklistener не работают из-за наличия собственного прослушивателя onclick.

установить фокусировку как ложное

holder.button.setFocusable(false);
10
RVG

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

2) Проверьте, правильно ли вы добавили Listener в свой ListView. Он подключен к ListView, а не к ListAdapter!

ListView.setOnItemClickListener(listener);

3) Если вам нужно использовать OnClickListener, проверьте, используете ли вы DialogInterface.OnClickListener или View.OnClickListener (их можно легко заменить, если они не проверены, или если они оба используются)

8
Marek Sebera

setClickable как false для ImageButton, как это

imagebutton.setClickable(false);

а затем выполните OnItemClickListener для просмотра списка.

4
Ramakrishna

Если вы определите свой ListView программно:

mListView.setDescendantFocusability(ListView.FOCUS_BLOCK_DESCENDANTS);
4
jmaculate

Вы также можете использовать lambda. Лямбда-синтаксис не поддерживается в Java 1.7 или более ранних версиях JVM.

listView.setOnItemClickListener((parent, view, position, id) -> {
    ...
});
4
bheatcoker
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
tsiftis

В Java, как предлагают другие

listitem.setClickable(false);

Или в XML:

Android:clickable="false"

Работает очень хорошо

2
V. Kalyuzhnyu

Просто вставьте строку в 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
Abhishek Majumdar

Android OnItemClickLIstener конфликтует с OnClickListener элементов строки списка в Adapter. Вам просто нужно убедиться, что ваш код хорошо управляется и правильно написан в соответствии со стандартами.

Проверьте ответ по приведенной ниже ссылке:

Сделать список кликабельным

1
Zohaib Hassan

Есть ли и изображение в представлении списка, которое вы используете>, затем перейдите по ссылке: http://vikaskanani.wordpress.com/2011/07/20/Android-custom-image-gallery-with-checkbox- в сетке-к-выбрать-кратный /

Я думаю, что когда вы работаете по ссылке, которую я предоставил вначале, все будет работать нормально, я попробовал это. Если вы хотите получить точный ответ, уточните вопрос с кодом и описанием.

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

    }
} );
1
user3977776