在RecyclerView ViewHolder(Android-Kotlin)中进行视图更改
在我的片段中,我有一个visibility=“gone”视图和一个包含一些元素的recyclerview 当我单击某个元素时,我想将该可见性设置为“可见”,但我遇到了问题 这是我的RV适配器上的onBindViewHolder方法在RecyclerView ViewHolder(Android-Kotlin)中进行视图更改,android,android-fragments,android-recyclerview,android-view,android-viewholder,Android,Android Fragments,Android Recyclerview,Android View,Android Viewholder,在我的片段中,我有一个visibility=“gone”视图和一个包含一些元素的recyclerview 当我单击某个元素时,我想将该可见性设置为“可见”,但我遇到了问题 这是我的RV适配器上的onBindViewHolder方法 override fun onBindViewHolder( holderList: VideoListViewHolder, position: Int, video: Video
override fun onBindViewHolder(
holderList: VideoListViewHolder,
position: Int,
video: Video
) {
holderList.bind(video)
holderList.itemView.setOnClickListener { listener(video) }
}
这是我的自定义ViewHolder类
class VideoListViewHolder(
itemView: View
) : RecyclerView.ViewHolder(itemView) {
fun bind(video: Video) {
itemView.video_title.text = video.title
Picasso.with(itemView.context).load(video.src).into(itemView.video_src)
}
}
如果视图在同一个片段上,为什么我不能访问它?(菲利普·索拉尔回答)
在RV的onBindViewHolder方法中实现了一个监听器之后,我可以说这种方法很有效!每当我点击一个项目时,我都可以看到Toast消息,但“src”不会消失,“test”也不会出现
这是我初始化RV适配器的地方
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
rvAdapter = VideoListRvAdapter().fetchVideos(firestore) { video ->
val invisible = test.visibility
test.visibility = View.VISIBLE
val visible = test.visibility
Toast.makeText(context, "view is still gone", Toast.LENGTH_LONG).show()
}
videos_rv.apply {
layoutManager = LinearLayoutManager(context)
adapter = rvAdapter
}
}
奇怪的是,在调试模式下,我看到属性“可见性”的值在变化。它从0变为8,但仍然看不到任何更改。为什么会这样
最后一次编辑:解决了它。在后台运行的动画有问题:)如果我理解正确,您要使其可见的视图在片段中,而不是在ViewHolder的视图中,因此您尝试访问ViewHolder视图中的视图,但实际上不在那里
我建议您在Recycler视图的适配器中创建一个回调接口,该接口将绑定到您的片段,该适配器将把它的单击委托给父片段。您可以处理片段中的可见性更改。Filip,谢谢。我已经在调查了。这与调用在片段类中定义的方法不一样吗?因为我尝试定义一个方法,将视图的可见性设置为visible,然后在我的ViewHolder上实例化片段以调用该方法,但没有成功。我假设这是因为我实例化的片段与当前在模拟器上运行的片段不同。我说的对吗?是的,奥古斯丁,你正在你的回收器适配器中创建一个新片段。以下是如何在kotlin中实现这一点的教程:。在那里他们使用匿名函数。最好在这里发布你的代码