我有一个包含 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() }
}
Run Code Online (Sandbox Code Playgroud)
我确实读过一篇文章,它描述了一种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()
Run Code Online (Sandbox Code Playgroud)
============ 更新 2020-03-07 ================
这正是androidx.constraintlayout.widget.Group 的设计目的,它可以从任何地方对一堆视图进行逻辑分组,并通过仅更改组的可见性来控制它们的可见性。
小智 12
从ConstraintLayout1.1 开始,您可以使用 Group 而不是LayoutGroup. 您可以简单地将此代码添加到您的 XML 布局
<android.support.constraint.Group
android:id="@+id/profile"
app:constraint_referenced_ids="profile_name,profile_image" />
Run Code Online (Sandbox Code Playgroud)
然后你可以从代码中调用它来实现你需要的行为
profile.visibility = GONE
profile.visibility = VISIBLE
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请阅读本文https://medium.com/androiddevelopers/introducing-constraint-layout-1-1-d07fc02406bc
小智 5
您需要创建扩展函数。
例如:
fun View.showGroupViews(vararg view: View) {
view.forEach {
it.show()
}
}
fun View.hideGroupViews(vararg view: View) {
view.forEach {
it.hide()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2434 次 |
| 最近记录: |