android-fragments 如何在Kotlin中引用不同视图中的按钮

wztqucjr  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(154)

我想完成一个简单的任务。我在一个布局中有一个不可见的按钮,并且有一个片段。当执行此函数时,我想让另一个布局中的按钮变为可见。但是,这个带有按钮的布局不在片段布局中,这意味着我必须在片段中引用该按钮,但我不知道如何去做。

这是Fragment对第一次使用的用户的外观。你看到的图像是在一个循环视图中,它会膨胀一个布局。这个布局有一个不可见的按钮。

片段类

//item subscribed
    if (subscribeValueFromPref) {
        subscribeAbstract.visibility = View.GONE
        // abstractDownload.visibility = View.VISIBLE


    } else {
        subscribeAbstract.visibility = View.VISIBLE
        // abstractDownload.visibility = View.VISIBLE

    }
}

当执行这行代码时,片段中的按钮消失了,而另一个布局中的按钮变为可见。正如你所看到的,我在代码前面画了两个笔画。一旦代码执行完毕,布局应该是这样的。

摘要

我想从一个fragment类引用另一个布局中的按钮。

vptzau2j

vptzau2j1#

你甚至需要在片段之间进行通信吗?你的例子看起来就像一个带有订阅按钮的片段,以及一个RecyclerView,其中包含了一个可以显示或隐藏按钮的条目。你可以只把这部分变成Adapter的状态,如下所示:

class MyAdapter : RecyclerView.Adapter<ViewHolder>() {

    var showDownloadButtons = false
    set(value) {
        field = value
        // call this to update the display (calls onBindViewHolder for items)
        notifyDataSetChanged()
    }

    override fun onBindViewHolder(viewHolder: ViewHolder, position.Int) {
        ...
        // when displaying an item, show or hide the download button as appropriate
        viewHolder.downloadButton.visibility = if (showDownloadButtons) VISIBLE else INVISIBLE
    }

}

然后在片段中,当您根据订阅值计算出UI状态时,您只需处理主按钮并告诉适配器要显示什么:

if (subscribeValueFromPref) {
    subscribeAbstract.visibility = View.GONE
    adapter.showDownloadButtons = true
} else {
    subscribeAbstract.visibility = View.VISIBLE
    adapter.showDownloadButtons = false
}

相关问题