如何遍历视图的元素

时间:2011-01-26 20:45:58

标签: android forms

我有一个带无线电,输入和按钮的视图,当我点击它时,我想检查所有输入是否包含信息。如何遍历活动中的视图元素并检查每个textview是否符合上述要求?感谢。

4 个答案:

答案 0 :(得分:118)

我在目前的一些代码中做了类似的事情,但是从内存中它应该是这样的(假设父视图LinearLayout的id为“layout”):

LinearLayout layout = (LinearLayout)findViewById(R.id.layout);
boolean success = formIsValid(layout);

public boolean formIsValid(LinearLayout layout) {
    for (int i = 0; i < layout.getChildCount(); i++) {
        View v = layout.getChildAt(i);
        if (v instanceof EditText) {
            //validate your EditText here
        } else if (v instanceof RadioButton) {
            //validate RadioButton
        } //etc. If it fails anywhere, just return false.
    }
    return true;
}

答案 1 :(得分:17)

要通过kcoppock递归应用该方法,您可以将其更改为:

private void loopViews(ViewGroup view) {
    for (int i = 0; i < view.getChildCount(); i++) {
        View v = view.getChildAt(i);

        if (v instanceof EditText) {
            // Do something

        } else if (v instanceof ViewGroup) {

            this.loopViews((ViewGroup) v);
        }
    }
} 

答案 2 :(得分:5)

如果您使用Kotlin编写,则Android Jetpack的Kotlin extensions (KTX)提供了用于迭代ViewGroup子项的扩展功能。

myViewGroup.forEach { ... }

myViewGroup.forEachIndexed { index, view -> ... }

只需将依赖项添加到您的应用程序即可。检查上面的链接以获取最新版本。

implementation "androidx.core:core-ktx:1.2.0"

这些扩展包含有用的功能,否则将被归纳为样板。值得现在退房,以节省将来的时间!

答案 3 :(得分:0)

您的onClickListener提供View v个对象;使用View rV = v.getRootView()将自己定位在表单上。然后使用rV.findViewWithTag( ... )rV.findViewByID(R.id. ... )找到您的表单元素。