- RecyclerView Item Click Listener the Right Way
- Example Scenario
- Project Creation
- Data model
- Recyclerview Adapter and view holder
- Item Click the bad way
- Let us fix it
- Обработка нажатия кнопок в адаптере recyclerview (Kotlin)?
- 2 ответа
- Kotlin Recyclerview Tutorial With Example CardView Item Click Image Text
- Step 1. Updating build.gradle(Module:app)
- Step 2. Downloading Images
- Step 3: Coding cardview.xml
- Step 4. Making Row Item File
- Step 5. Making Model Class
- Step 6. Custom Adapter
- Step 7. Updating Main Activity
- Explaining MainActivity.kt
- RecyclerView itemClickListener в Котлине
- RecyclerView itemClickListener в Котлине
- 12 ответов
- 1: создайте файл RecyclerItemClickListener
- 2: Создание / добавление расширений для RecyclerView:
- 3: и, наконец, использование (Я полагаю, вы используете kotlinx)
RecyclerView Item Click Listener the Right Way
Some Android developers wonder why Google created a view like Recyclerview without a click listener(given the fact that the deprecated ListView has an item click listener).
Because there is no standard way of setting a click listener, new developers tend to confuse on the right way of doing it. In this article, I will show you how to do it in a proper way using an example scenario.
Example Scenario
- There is a Recyclerview adapter with a Recyclerview with a list of items(Users in this case).
- What we want is that when an item is clicked, we get the item’s model(User) information and may be pass it to a second activity.
Project Creation
From Android Studio, create an empty android project(Select the Kotlin support option) and name your activity, MainActivity.
- Delete the default ‘Hello World’ TextView in activity_main.xml .
- Add recyclerview and cardview dependencies in app level build.gradle file as shown below.
Add recyclerview in activity_main.xml where you removed the textview as shown below.
Ok we are good to go. The assumption is that you have worked with the recyclerview(in Java) before and know how to create a recyclerview adapter.. Next, we create the model class containing username and phone.
Data model
Sweet Kotlin. Just the above line of code gives us access to a setter and getter under the hood and other methods like toString. Check more at https://kotlinlang.org/docs/reference/data-classes.html .
Next, we create our view holder and adapter. Pay attention here because it is the most important part of what this article addresses.
Recyclerview Adapter and view holder
- Create a new Kotlin file called RecyclerAdapter.kt
- Next we create our item_user.xml layout as follows
The item_user has two textviews which holds the name and phone.
Next we create our view holder. As usual, our view holder has a constructor with an itemView as parameter and we get a reference to our views from item_user layout .
Then we create our adapter with the list of users as a parameter. An adapter contains the list of users
Item Click the bad way
Note that in onBindView, we can have access to the the current clicked item and thus open a new activity from here and pass our data..
This will work perfectly but it is a bad practice because
- It is not a good practice opening an Activity from a viewholder context
- Note that onBindViewHolder is called as your views are populated during scrolling. Thus you will have numerous calls to setOnClickListener.
Let us fix it
The way that you should do is that you create an ItemClickListener interface with one method ontemClicked with parameter User.
- We then pass modify the Adapter’s constructor to take the users list and an OnItemClickListener interface
- We also modify the the ViewHolder to have a bind function which takes a user and itemClick interface as follows.
This is all we have to do. We just have to implement the interface in our MainActivity .
Источник
Обработка нажатия кнопок в адаптере recyclerview (Kotlin)?
У меня есть адаптер, в котором каждый элемент имеет по 3 кнопки, которые генерируют диалог, который затем выполняет действие. У меня есть ощущение, что это должно быть удалено из адаптера (у меня есть доступные модели представлений), но это работает, и мне интересно: следует ли мне переместить логику во фрагмент, в модель представления, нужно ли мне вообще ее перемещать ( код ниже — плохая практика, и если да, то почему)? Любая помощь / вклад будут очень благодарны.
Вот код адаптера:
Это модель представления с настроенными переменными данных в реальном времени, с которыми я не мог работать во фрагменте, в котором находится этот RecyclerView:
2 ответа
Как реализовать onClick в RecyclerView. Предположим, что в Your Recycler каждое представление представляет собой визуализацию некоторого item , и когда вы нажимаете на него, вы хотите что-то сделать с этим элементом:
- Создать класс: ClickListener :
- Теперь в вашем RecylerViewAdapter передайте в качестве аргумента этот Listener:
- В onBindViewHolder передайте этот слушатель как аргумент
- В вашем классе ViewHolder:
- В макете вашего элемента (который необходимо преобразовать в макет привязки данных) добавьте следующее:
- Теперь вы можете добавить к Button метод onClick :
- Когда вы создаете адаптер во фрагменте или действии, вы должны передать clickListenner в качестве параметра. Таким образом, вы можете обрабатывать все, начиная с фрагмента, и RecyclerView не заботится о том, что вы делаете в этой функции.
Вот те изменения, которые у меня работают сейчас:
Во фрагменте, содержащем RecyclerView:
Я не мог понять, как передать позицию и int для оператора when через xml onClick, но на данный момент, по крайней мере, у класса адаптера удалена логика представления.
Источник
Kotlin Recyclerview Tutorial With Example CardView Item Click Image Text
Kotlin RecyclerView Tutorial With Example will be covered here.
RecyclerView is developed with kotlin for your next awesome android app.
This tutorial will guide you how to make a RecyclerView With CardView, Image and Text in Android Kotlin.
You will also learn to implement onClick, onItemClickListener, onItemTouchListener of RecyclerView.
We will use material design to implement RecyclerView and CardView.
RecyclerView and Kotlin both are updated items for android app development. Kotlin is updated from Java and RecyclerView is updated from Listview.
So this tutorial can be handy helpful for you to update with latest trends in android app development.
First, check the output of RecyclerView Android tutorial then follow all the steps.
Step 1. Updating build.gradle(Module:app)
Very first thing is to add two lines in build.gradle(Module:app) file as per below code
Full source code can be look like
Step 2. Downloading Images
We need some images to demonstrate in RecyclerView.
You should learn here how to add images in drawable folder in the step 2 of circular progressbar example android. (No need to create xml file in drawable, just copy and paste images in drawable).
Step 3: Coding cardview.xml
Create a new file into drawable folder
Give it a name cardview.xml
Copy below source code into it.
This file makes designs how the cardview should look.
You change colors, corner size etc. things in this file.
Step 4. Making Row Item File
Prepare a new layout xml file and give it a name rv_item.xml
This file is the core structure of how single row of recyclerview will be look a like.
It contains ImageView and TextView.
Step 5. Making Model Class
Make a new kotlin class named “Model.kt”
Add below source code into it
Step 6. Custom Adapter
Now we will make a custom adapter. For this, create a new class named Adapter.kt
Write below source code in Adapter class.
Step 7. Updating Main Activity
We need to change both activity_main.xml and MainActivity.kt files
Replace source code of activity_main.xml with below one
Now replace code of MainActivity.kt class
Explaining MainActivity.kt
The below code is required to get click position of RecyclerView.
To get click position, we need create one interface and one class.
Interface is created with following code
The required class is made with below source code
So it was all about making RecyclerView With CardView, Material Design ,Image And Text in Kotlin for android app.
Do not hesitate to use comment section for any queries or reviews.
Please LIKE and SHARE this kotlin recyclerview tutorial with your other buddies to help them as well as us!
Источник
RecyclerView itemClickListener в Котлине
Я пишу свое первое приложение в Kotlin после 3-летнего опыта работы с Android.
Просто запутался, как использовать itemClickListener с RecyclerView в Котлине.
Я пробовал подход (edit: now interface), очень похожий на Java
Это казалось очень избыточным, поэтому я попытался использовать внутренний класс:
А затем просто настройте прослушиватель кликов адаптера следующим образом:
Но я все еще не удовлетворен этим, потому что думаю, что может быть лучший, более чистый способ. Я пытаюсь добиться чего-то вроде этого:
RecyclerView onClick
Закончено с изменением одобренного ответа
Определена функция в активности:
Передача самой функции на адаптер так:
Функция расширения с помощью Loop в утверждённом ниже ответе.
У меня есть немного другой подход. Вы можете создать расширение для своего ViewHolder
Затем используйте его в адаптере, как это
Я работаю с коллегами по библиотеке, предоставляя такие расширения.
Мое решение похоже на сочетание предыдущих с супер чистым вызовом из активности.
ContactAdapter:
ContactActivity:
В случае, если кто-либо ищет более беззаботный ответ, я попробовал следующее: это очень похоже на решение от AfzalivE:
В моем классе адаптера я передал clickListener в качестве параметра. В onBindViewHolder я использовал setOnClickListener для вызова clickListener и обработки события click.
MyAdapter.kt
Примечание. Мне нужна ссылка из моего контейнера элементов списка (корневой вид), который в этом случае равен containerView
Затем я передал свой объект как параметр без необходимости повторного поиска его в списке и обработал его непосредственно в моем классе Activity в момент установки адаптера:
MyActivity.kt
Обновление
Если вам нужно получить позицию щелкнутого элемента, просто определите его как параметр в обратном вызове, а затем отправьте его позже. Обратите внимание на val clickListener: (MyObject, Int) -> Unit ниже:
MyAdapter.kt
Затем на onBindViewHolder() вы передаете позицию при вызове метода обратного вызова:
Источник
RecyclerView itemClickListener в Котлине
Я пишу свое первое приложение в Котлине после 3 лет опыта работы с Android. Просто запутался, как использовать itemClickListener с RecyclerView в Котлине.
Я пробовал подход к черте (edit: now interface), очень похожий на Java
это казалось очень избыточным, поэтому я попробовал подход внутреннего класса:
а затем просто установите прослушиватель щелчка адаптера следующим образом:
но я все еще не удовлетворен с этим, потому что я думаю, что может быть лучший, более чистый способ. Я пытаюсь достичь чего-то подобного.: RecyclerView onClick
в конечном итоге происходит с изменением утвержденного ответа
определена функция в действии:
передал саму функцию на адаптер следующим образом:
функция расширения петлей в утвержденном ответе под.
12 ответов
у меня немного другой подход. Вы можете создать расширение для своего ViewHolder
затем используйте его в адаптере, как это
Я работаю с моими коллегами на библиотека обеспечение такого расширения.
мое решение похоже на комбинацию предыдущих с супер чистым вызовом из действия.
ContactAdapter:
ContactActivity:
в случае, если кто-то ищет более без излишеств ответ, я попробовал следующее — что очень похоже на решение от AfzalivE:
в моем классе адаптера я прошел clickListener в качестве параметра. On onBindViewHolder , я использовал setOnClickListener называть clickListener и обрабатывать событие click.
MyAdapter.kt:
Примечание: мне нужна ссылка из контейнера моего элемента списка (корень view), который в этом случае является containerView
затем я передал свой объект как параметр без необходимости искать его в списке снова и обрабатывать его непосредственно на моем Activity класс, в момент установки адаптера:
MyActivity.kt:
обновление
Если вам нужно получить положение щелкнутого элемента, просто определите его как параметр на обратном вызове, а затем отправьте его позже. Обратите внимание на val clickListener: (MyObject, Int) -> Unit ниже:
MyAdapter.kt
затем на onBindViewHolder() вы передаете позицию при вызове метода обратного вызова:
и MyActivity.kt, вам придется изменить способ установки адаптера, чтобы вы могли получить позицию. Вот так:
вы можете попробовать что-то вроде:
и Sam convertion просто работает как в Java 8, поэтому просто используйте лямбда:
Я думаю, что самое элегантное решение-дать эту ответственность recyclerView, а не просматривать или даже адаптировать его.
для этого нам понадобится:
1: создайте файл RecyclerItemClickListener
2: Создание / добавление расширений для RecyclerView:
3: и, наконец, использование (Я полагаю, вы используете kotlinx)
Источник