kotlin 如何设置RecyclerView中任何其他项目的布局在单击当前项目时不可见/消失

lhcgjxsq  于 2022-11-30  发布在  Kotlin
关注(0)|答案(1)|浏览(88)

我需要帮助。
我想改变按钮可见性在任何其他项目内recyclerview消失,所以其他按钮,除了项目,我选择成为不可见...
触发器是当项目被点击/选择,然后任何其他项目的按钮去看不见/去了,除了我点击...我怎么做?我使用Kotlin顺便说一句。
下面是我想在onBindViewHolder的"if(! b)"(如果可能的话)中实现它的地方:

holder.mainLayout.setOnClickListener {
           
            if (!b){
                b = true
                holder.addsLayout.isVisible = true

            } else {
                b = false
                holder.addsLayout.isVisible = false
            }
        }

编辑:
这是我的观点:

class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
        val itemTitle: TextView = itemView.findViewById(R.id.itemTitleRecordLocal)
        val itemDelete: Button = itemView.findViewById(R.id.recordlocalDelete)
        val itemTranscribe: Button = itemView.findViewById(R.id.transcribelocalTxt)
        val mainLayout: RelativeLayout = itemView.findViewById(R.id.recordlocalTitleDateLayout)
        val addsLayout: RelativeLayout = itemView.findViewById(R.id.addsRecordLocalLayout)
}

我刚刚更新了我的代码较早,所以它不再是按钮,但布局,但我认为它类似的bcuz我只需要改变可见性。

  1. itemDelete和itemTranscribe是我想隐藏的按钮,我把它放在addsLayout中。
  2. mainLayout是我需要单击才能选中的项目。
eqqqjvef

eqqqjvef1#

根据您的代码,我知道您正在将任何数据类传递给类型为suppose myData的回收程序视图适配器
您可以执行以下操作:
在数据类项中取一个布尔变量,比如isSelected,默认值为false。
然后每当你点击你的mainLayout,改变布尔值。
根据该布尔值检查条件并根据该布尔值管理可见性。
另外,最好的做法是在activity/fragment中管理clickevents,所以我的建议是将mainLayout的click回调给activity/fragment,然后只在那里执行后续操作。
之后,在activity/fragment中,您需要为循环创建for,并为除您选择的数据之外的所有数据创建isSelected false。
例如,我有一个音乐播放器recyclerview,如果一个正在播放,那么其他所有的都应该暂停,所以我需要根据这个条件来改变图标。我的数据类包含一个变量isPlaying
在适配器中:

// Inside view holder
if (data.isPlaying) {
    // set image of play
} else {
   // set image of pause
}

在点击中,我创建了一个可变的实时数据,并在活动/片段中观察该数据,并在那里获得点击的回调。
内部活动/片段:

adapter.getListItems().forEach {
                        it.isPlaying = false
                    }
data.isPlaying = true
notifyDataSetChanged()

相关问题