Подтвердить что ты не робот

ListView OnItemClickListener не отвечает?

Я искал везде решение для этого, но я не могу понять, как его реализовать. Мой OnItemClickListener был отключен как-то на моих ListView строках, потому что у меня есть ImageButton в макете строк, который берет фокус. Были многочисленные вопросы, которые я нашел, но ни один из них не доставил меня никуда.

Я проверил этот вопрос, но я не мог сделать из него головы или хвосты. Мне просто нужен способ, чтобы строки были удобными, чтобы я мог обнаружить, когда строка нажата. Длительное нажатие и фокусировка работают нормально.

4b9b3361

Ответ 1

Вместо OnItemClickListener добавьте OnClickListener к каждому из ваших представлений, возвращаемых вашим адаптером. Вам нужно будет использовать setItemsCanFocus настройку списка:

ListView list = (ListView) findViewById(R.id.myList);
list.setAdapter(new DoubleClickAdapter(this));
list.setItemsCanFocus(true);

а затем в вашем адаптере getView, это приведет к кликабельной строке. Предполагается, что кнопка находится в надутом xml.

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = View.inflate(context, R.layout.cell, null);
    view.setClickable(true);
    view.setFocusable(true);
    view.setBackgroundResource(android.R.drawable.menuitem_background);
    view.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            new AlertDialog.Builder(context).setTitle("touched").show();
        }

    });
    return view;
}

Ответ 2

установите свой атрибут ImageButton:

android:focusable="false"

Потому что AbsListView.onTouchEvent проверьте child.hasFocusable().

Ответ 3

Я тестировал следующее решение на уровнях SDK 8 и 16.

В getView()

setFocusable(false);
setClickable(false);

вместо того, чтобы устанавливать их true в адаптере getView(), делает то, что, как мне кажется, требует первоначальный запрос, и означает, что вызов OnItemClickListener вызывается, при условии, что OnClickListener не установлен в getView().

Я предполагаю, что все, что вы можете сделать в View OnClickListener, можно сделать так же легко в ListView OnItemClickListener. (setOnClickListener в представлении неявно задает возможность кликабельности, что предотвращает вызов ListView OnItemClickListener, видимо.)

Поведение такое же, как можно было бы ожидать, в виде визуального состояния ImageButton при нажатии или перетаскивании элемента.

Решение - небольшая иллюзия, поскольку элемент списка не нажат не сам ImageButton, поэтому, если кнопка не занимает весь элемент списка, щелчок в другом месте элемента все равно сделает кнопку выталкиваемое состояние отражает щелчок. То же самое для фокуса. Это может стоить цена.

Ответ 4

Это определенно сработает. Добавьте это в определение макета.

android:descendantFocusability="blocksDescendants" 

Найденное решение здесь

Ответ 5

Альтернативой установке OnClickListener для каждого представления является НЕ использовать ImageButton - вместо этого использовать ImageView. ImageView все равно может отправлять события в OnClickListener и не будет занимать фокус.

Ответ 6

лучший способ сделать это:

  android:focusable="false"
  android:focusableInTouchMode="false"

задайте эти свойства для этого Imagebutton и попробуйте. I

Ответ 7

В моей версии этой проблемы проблема заключалась в том, что я установил для моего объекта TextView значение android:inputType="textMultiLine". Когда я удалил эту строку, вопрос о том, что список не доступен для клика, исчез. Похож на неприятную маленькую ошибку.

Кроме того, я все еще могу использовать свойства android:minLines/android:maxLines без проблем, так что это не большая проблема. Просто не решение, которое я ожидал.

Ответ 8

В качестве альтернативного решения, которое работало для меня, вы можете попробовать расширить свой адаптер от BaseAdapter (iso реализации ListAdapter интерфейса)

Ответ 9

Следующая строка решила проблему в моем проекте:

<TextView ... android:textIsSelectable="false" />

Ответ 10

Поместите этот код ImageView nextpage= (ImageView)findViewById(R.id.btnEdit); вместо ImageButton. теперь элемент списка активен

Ответ 11

У меня есть подклассы ImageButton и setFocusable="false" в определении макета для меня не работает. Он решил вызвать setFocusable(false) в конструкторе подкласса.

Ответ 12

    listView= (ListView) findViewById(R.id.listview_names);

   listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
       @Override
       public void onItemClick(AdapterView<?> parent, View view, int position, long id)
       {
           Toast.makeText(getBaseContext(),"Clicked Button",Toast.LENGTH_LONG).show();
           Log.d("h","clicked");

           /* Intent intent=new Intent(MainActivity.this,Display_data.class);

            intent.putExtra("NAME",n);
            intent.putExtra("AGE",a);
            startActivity(intent);*/
       }
   });

Y этот тост не работает

Ответ 13

Использование ScrollView может помешать onItemClickListener получить вход.

Надеюсь, это поможет кому угодно.