选择新项目时,在recyclerview中未选择其他项目

时间:2020-04-15 13:39:58

标签: android kotlin android-recyclerview

在卧式recyclerview中,我有一个类别列表。我已经将选择器作为背景,用于在选择或不选择项目时交换项目上的颜色。但是我想这样做,当我单击一个新项目时,所选的旧项目会被取消选择。我该怎么办?我做了一个GIT回购,在这里描述了我的问题:

https://github.com/Larrsenn/RecyclerViewTest

编辑: 在将isSelected作为布尔标志放在我的ItemViewModel上的建议之后,它现在有时还会更新我未单击的其他项。我已经更新了git-repo,以便您了解它的工作方式。

1 个答案:

答案 0 :(得分:1)

我的建议是。

->假设您有Recyclerview的数据,例如 RecyclerItemData,应具有一个布尔标志isSelected

-> isSelected = true(所选背景可见)

-> isSelected = false(可见未选择的空白)

->现在,当用户单击回收器项目时,通过方法接口(ItemClicked(String id))将被单击项目的RecyclerItemData的ID传递给您的活动。

->现在循环遍历整个列表,对于整个列表,使isSelected = false(具有ID异常的项除外)(使它变为true)。

->现在调用adapter.notifydatasetchanged()

<"text-right"l><"clear"><"bottom"ip>
<"top"l>rt
<"text-right"l>t<"bottom"pi><"clear">

您的存储库中需要进行更改。

https://github.com/Larrsenn/RecyclerViewTest/blob/master/app/src/main/java/dk/larsen/testrecyclerview/MovieCategory.kt

 //In onBindViewHolder() you should have code to handle isSelected flag, 
if(isSelected){
// Show selected background 
}else{
// Show unselected background
}

在此处准备addDataToRecycelrView()方法中的列表时 https://github.com/Larrsenn/RecyclerViewTest/blob/master/app/src/main/java/dk/larsen/testrecyclerview/MainActivity.kt

将每个项目的isSelected的默认值设置为false。

在适配器类中

data class MovieCategory(val id: Int, val title: String, var isSelected: Boolean)

在适配器中,将其从MovieCategoryItemViewModel更改为MovieCategory 界面互动{ 有趣的onMovieCategoryItemSelected(项目:MovieCategory) }

在MainActivity中onMovieCategoryItemSelected方法中

fun bind(item: MovieCategoryItemViewModel) = with(itemView) {
        itemView.setOnClickListener {
            interaction?.onMovieCategoryItemSelected(item)
            // itemView.isSelected = true // remove this line..
        }