Эффект RecyclerView onItemClick в L

Возможно, этот вопрос уже задавался ранее, но я не нашел точного ответа. Я реализовал виджет RecyclerView в виде списка в своем тестовом приложении L и хочу получить «материальный эффект», когда вы нажимаете на элемент из списка. Я реализовал onClickListener в своем творении ViewHolder и установил атрибут

android:background="?android:attr/selectableItemBackground"

в качестве фона для моего макета элемента списка (для родителя).

Но ничего из этого не сработало. Когда я нажимаю на элементы, НИЧЕГО не происходит». Нет эффекта, голо, материала, нет... Пожалуйста, укажите, если я делаю что-то не так... Спасибо


person Sandra    schedule 25.07.2014    source источник


Ответы (3)


Ответ Сандры мне не помог. Мне нужно было еще одно свойство в моем макете элемента списка:

android:clickable="true"
android:focusable="true"
android:background="?android:attr/selectableItemBackground"

Примечание: если вы получаете сообщение об ошибке при вставке последней строки, значит, ваше приложение для Android установлено на версию 10 или ниже. Просто щелкните правой кнопкой мыши ошибку в Android Studio и установите ее так, чтобы она также создала версию вашего макета v11. Затем в исходном макете обязательно удалите

android:background="?android:attr/selectableItemBackground"`

Это связано с тем, что анимация не поддерживается в версиях Android версии 10 и ниже. После настройки этих двух файлов макета анимация будет правильно отображаться в версиях Android v11+ и, конечно, не будет отображаться в более ранних версиях.

(или просто увеличьте версию minSdkVersion вашего приложения выше 10)

person Micro    schedule 13.09.2015
comment
Я не поставил android:background=?android:attr/selectableItemBackground` в ответ на свой вопрос, потому что я объяснил в самом своем вопросе, что он уже реализован в коде... извините за путаницу - person Sandra; 02.12.2015
comment
setFocusable(true) здесь не нужен и на самом деле избыточен, если элемент может попасть в состояние «элемент в фокусе» и получить серый фон. Волновой эффект будет работать даже без этого атрибута. - person Alexey Strakh; 20.04.2016

Я сделал глупую ошибку и не поставил

android:clickable="true"
android:focusable="true"

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

person Sandra    schedule 29.07.2014
comment
Вы знаете, как добавить нижнюю границу к элементу? Все методы, которые я нашел, используют фон корневого макета, но я не могу его использовать, так как он уже настроен для эффекта щелчка. - person Link14; 25.11.2014
comment
@ Link14 вы можете реализовать украшение элемента (вы можете вызвать addItemDecoration() для объекта recyclerView). Чтобы реализовать желаемое украшение (границу или что-то еще), вам нужно добавить класс, который расширяет RecyclerView.ItemDecoration в ваш проект, и изменить его в соответствии с вашими потребностями. Вы будете использовать этот класс в качестве аргумента в addItemDecoration(). В этой теме есть гораздо больше объяснений по этому поводу как добавить разделители и пробелы между элементами в recyclerview"> stackoverflow.com/questions/24618829/. Класс RecyclerView.ItemDecoration доступен здесь gist.github.com/alexfu/0f464fc3742f134ccd1e. - person Sandra; 18.12.2014
comment
setFocusable(true) здесь не нужен и на самом деле избыточен, если элемент может попасть в состояние «элемент в фокусе» и получить серый фон. Волновой эффект будет работать даже без этого атрибута. - person Alexey Strakh; 20.04.2016

android:clickable="true"
android:focusable="true"

эти линии больше не используются. просто добавляю

android:background="?android:attr/selectableItemBackground"

работает на эффект клика.

person Cüneyt    schedule 18.01.2017
comment
Это, наверное, так и сейчас. Но в то время, когда был задан этот вопрос, я пытался использовать предварительный просмотр L, и эффект клика исчез :) - person Sandra; 01.02.2017
comment
Я понимаю. Я отредактировал свой ответ, больше не =) - person Cüneyt; 02.02.2017