在卧式recyclerview中,我有一个类别列表。我已经将选择器作为背景,用于在选择或不选择项目时交换项目上的颜色。但是我想这样做,当我单击一个新项目时,所选的旧项目会被取消选择。我该怎么办?我做了一个GIT回购,在这里描述了我的问题:
https://github.com/Larrsenn/RecyclerViewTest
编辑: 在将isSelected作为布尔标志放在我的ItemViewModel上的建议之后,它现在有时还会更新我未单击的其他项。我已经更新了git-repo,以便您了解它的工作方式。
答案 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">
您的存储库中需要进行更改。
//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..
}