Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在RecyclerView ViewHolder(Android-Kotlin)中进行视图更改_Android_Android Fragments_Android Recyclerview_Android View_Android Viewholder - Fatal编程技术网

在RecyclerView ViewHolder(Android-Kotlin)中进行视图更改

在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

在我的片段中,我有一个visibility=“gone”视图和一个包含一些元素的recyclerview

当我单击某个元素时,我想将该可见性设置为“可见”,但我遇到了问题

这是我的RV适配器上的onBindViewHolder方法

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中实现这一点的教程:。在那里他们使用匿名函数。最好在这里发布你的代码