Java 遍历视图组

Java 遍历视图组,java,android,Java,Android,如果安卓系统有一个新的屏幕,我想遍历所有的视图组和视图,以发现所有的按钮、文本字段、微调器等。。。这可能吗?我得到了视图计数,然后将其用作 counter to call getChildAt(int index)这个问题可能已经回答很久了,但我编写这个递归函数是为了为我在布局中找到的任何按钮设置onClickListeners,但它可以重新调整用途: private void recurseViews(ViewGroup v) { View a; boolean isgrp =

如果安卓系统有一个新的屏幕,我想遍历所有的视图组和视图,以发现所有的按钮、文本字段、微调器等。。。这可能吗?

我得到了视图计数,然后将其用作
counter to call getChildAt(int index)

这个问题可能已经回答很久了,但我编写这个递归函数是为了为我在布局中找到的任何按钮设置onClickListeners,但它可以重新调整用途:

private void recurseViews(ViewGroup v) {
    View a;
    boolean isgrp = false;
    for(int i = 0; i < v.getChildCount(); i++) { //attach listener to all buttons
        a = v.getChildAt(i);
        if(a instanceof ViewGroup) setcl((ViewGroup) a);
        else if(a != null) {
            //do stuff with View a
        }
    }
    return;
}
private void recurseViews(视图组v){
视图a;
布尔值isgrp=false;
对于(inti=0;i

编辑:将视图强制转换为ViewGroup不会像我之前所想的那样引发异常,因此代码现在要短得多

您可以使用它获取父布局中的所有子视图,返回视图的数组列表

public List<View> getAllViews(ViewGroup layout){
        List<View> views = new ArrayList<>();
        for(int i =0; i< layout.getChildCount(); i++){
            views.add(layout.getChildAt(i));
        }
        return views;
}
公共列表GetAllView(视图组布局){
列表视图=新建ArrayList();
对于(int i=0;i
如果您想获得特定视图,可以使用此示例。它将所有文本视图都包含在一个布局中

public List<TextView> getAllTextViews(ViewGroup layout){
        List<TextView> views = new ArrayList<>();
        for(int i =0; i< layout.getChildCount(); i++){
            View v =layout.getChildAt(i);
            if(v instanceof TextView){
                views.add((TextView)v);
            }
        }
        return views;
    }
公共列表GetAllTextView(视图组布局){
列表视图=新建ArrayList();
对于(int i=0;i

只要您试图获取的对象来自View类,它就可以工作。

检查Romain Guy的回答: