gpt4 book ai didi

android - 以编程方式查找 View 组中的所有按钮

转载 作者:行者123 更新时间:2023-12-02 13:22:25 24 4
gpt4 key购买 nike

我一直在尝试找到一种方法来避免将我在设计模式下创建的组件手动分配给数组变量,但没有成功。我的意思是,不必这样做:
val myButtons = ArrayOf (bt0, bt1, bt2,bt3..bt30...等等

我想知道是否有一种方法可以遍历应用程序中创建的所有按钮(或任何其他组件)并通过它们的类索引调用它们,就像你可以在 HTML 中那样:
button class = "buttons"
这样,在 HTML 中,我可以使用 JavaScript/jQuery 创建和操作任意数量的按钮,只需使用 getElementByClassName $(". buttons")分别。

即使在旧的 VisualBasic 6 次中,每当我复制一个组件并粘贴它的副本时,VB 都会询问我是否应该创建这些组件的数组,如果是,它会为每个粘贴的新组件分配一个索引。通过这种方式,我可以使用 for/each 循环或单独通过它们的索引以编程方式操作它们。
在 Android Studio 中是否不可能做到这一点(我正在使用 Kotlin,但如果它是一种语言支持限制,我很乐意转向 Java)并且每次手动将每个元素分配给一个数组变量真的是唯一的选择是?真希望不要...

提前致谢!

最佳答案

像这样的东西应该工作:

private val buttons = ArrayList<Button>() //this is a global variable

private fun loopThrough(parent: ViewGroup) {
for (i in 0 until parent.childCount) {
val child = parent.getChildAt(i)

if (child is Button) buttons.add(child)
else if (child is ViewGroup) loopThrough(child)
}
}

要首先调用它,首先给 Activity 的 XML 的根 View 元素一个 ID:
<YourRootLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/root">

<!--...-->

</YourRootLayout>

( YourRootLayout 是您实际根布局的占位符)

然后,在您的 Activity 中调用 setContentView() 后,调用该函数:
loopThrough(findViewById<ViewGroup>(R.id.root))

完成后, buttons 变量将保存对布局中所有按钮的引用。

或者,您可以修改 this strategy ,为您的按钮提供顺序 ID,尽管您会因此失去一些可读性。

关于android - 以编程方式查找 View 组中的所有按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53023635/

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