gpt4 book ai didi

android - 如何将一堆 View 分组并一起更改它们的可见性

转载 作者:行者123 更新时间:2023-11-29 14:29:47 27 4
gpt4 key购买 nike

我有一个包含 2 组 View 的 Activity ,它们不能位于同一个 LAYOUT 组但属于同一个 LOGIC 组,这意味着它们应该显示或隐藏并绑定(bind)点击事件在同一时间。问题是我觉得写这样的东西真的很糟糕:

fun hide() {
view1.visibility = View.GONE
view2.visibility = View.GONE
view3.visibility = View.GONE
// ...
view9.visibility = View.GONE
}


fun show() {
view1.visibility = View.VISIBLE
view2.visibility = View.VISIBLE
view3.visibility = View.VISIBLE
// ...
view9.visibility = View.VISIBLE

view1.setOnClickListener{ run() }
view2.setOnClickListener{ run() }
view3.setOnClickListener{ run() }
// ...
view9.setOnClickListener{ run() }
}

我确实读过一篇描述 kotlin 技能 的文章,该文章通过以某种方式对这些 View 进行分组然后处理这些组来简化这一困惑局面,但不幸的是我再也找不到那篇文章了。

帮助将不胜感激!

========= 2019-07-31 更新 =========

我找到了解决方案,但忘记更新这个问题,我一直在寻找的“分组”实际上不是 Kotlin 特定的功能,而是简单地使用 vararg,我们可以使用 Kotlin 扩展(非常棒)来进一步简化:

// assume we have a base activity or fragment, then put below functions in there
fun View.show() {
visibility = View.VISIBLE
}

fun show(vararg views: View) {
views.forEach { it.show() }
}

fun View.hide() {
visibility = View.GONE
}

fun hide(vararg views: View) {
views.forEach { it.hide() }
}

// then in any activity or fragment
show(v1, v2, v3, v4)
v9.hide()

============= 更新于 2020-03-07 ================

这正是 androidx.constraintlayout.widget.Group 设计的目的,它可以从任何地方对一堆 View 进行逻辑分组,并通过仅更改组的可见性来控制它们的可见性。

最佳答案

ConstraintLayout 1.1 你可以使用 Group 而不是 LayoutGroup。您可以简单地将这段代码添加到您的 XML 布局中

<android.support.constraint.Group
android:id="@+id/profile"
app:constraint_referenced_ids="profile_name,profile_image" />

然后您可以从代码中调用它来实现您需要的行为

profile.visibility = GONE
profile.visibility = VISIBLE

有关更多详细信息,请阅读本文 https://medium.com/androiddevelopers/introducing-constraint-layout-1-1-d07fc02406bc

关于android - 如何将一堆 View 分组并一起更改它们的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52835750/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com