android - 如何将一堆视图分组并一起更改它们的可见性
问题描述
我有一个包含 2 组视图的活动,它们不能位于同一个 LAYOUT 组但属于同一个 LOGIC 组,这意味着它们应该同时显示或隐藏并绑定点击事件。问题是我觉得写这样的东西真的很糟糕:
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 技能,通过以某种方式将这些视图分组然后只处理这些组来简化这种混乱,但不幸的是我再也找不到那个帖子了。
帮助将不胜感激!
========= 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设计的目的,它可以从任何地方对一堆视图进行逻辑分组,并通过仅更改组的可见性来控制它们的可见性。
解决方案
从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
推荐阅读
- apache-spark - Spark 日志中任务 id 格式的含义
- python - 我想让python说“请输入一个数字:”直到消费者输入一个数字
- c# - 通过 URL 传入 id 时的 Mvc Route 404
- java - 如何在 apache Beam 中调用 oracle 存储过程?
- c# - c# - 使用 roslyn 在运行时编译 c# 代码
- nsis - 写入自定义安装程序页面的标题部分(没有 MUI)
- java - sun.security.validator.ValidatorException: :无法找到请求目标的有效证书路径
- react-native - React-Native:启用“全屏模式”时如何获取设备的完整高度?
- azure - properties.search.query 不是有效的日志或指标查询
- java - 每次我运行代码时的其他字段位置