首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android -让孩子进入视图?

Android -让孩子进入视图?
EN

Stack Overflow用户
提问于 2011-12-06 11:59:59
回答 8查看 192.6K关注 0票数 181

给定一个视图,我如何获得其中的子视图?

因此,我有一个自定义的视图和调试器显示,在mChildren下有7个其他视图。我需要一种方法来访问这些视图,但似乎没有一个公共API可以做到这一点。

有什么建议吗?

编辑:

我的自定义视图继承自AdapterView

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-12-06 12:13:46

代码语言:javascript
复制
for(int index = 0; index < ((ViewGroup) viewGroup).getChildCount(); index++) {
    View nextChild = ((ViewGroup) viewGroup).getChildAt(index);
}

这样行吗?

票数 332
EN

Stack Overflow用户

发布于 2012-06-29 21:57:06

如果您不仅想要获取所有直接子项,而且还希望获取所有子项的子项等等,则必须递归地执行此操作:

代码语言:javascript
复制
private ArrayList<View> getAllChildren(View v) {

    if (!(v instanceof ViewGroup)) {
        ArrayList<View> viewArrayList = new ArrayList<View>();
        viewArrayList.add(v);
        return viewArrayList;
    }

    ArrayList<View> result = new ArrayList<View>();

    ViewGroup vg = (ViewGroup) v;
    for (int i = 0; i < vg.getChildCount(); i++) {

        View child = vg.getChildAt(i);

        ArrayList<View> viewArrayList = new ArrayList<View>();
        viewArrayList.add(v);
        viewArrayList.addAll(getAllChildren(child));

        result.addAll(viewArrayList);
    }
    return result;
}

要使用结果,您可以这样做:

代码语言:javascript
复制
    // check if a child is set to a specific String
    View myTopView;
    String toSearchFor = "Search me";
    boolean found = false;
    ArrayList<View> allViewsWithinMyTopView = getAllChildren(myTopView);
    for (View child : allViewsWithinMyTopView) {
        if (child instanceof TextView) {
            TextView childTextView = (TextView) child;
            if (TextUtils.equals(childTextView.getText().toString(), toSearchFor)) {
                found = true;
            }
        }
    }
    if (!found) {
        fail("Text '" + toSearchFor + "' not found within TopView");
    }
票数 59
EN

Stack Overflow用户

发布于 2011-12-06 12:11:16

您始终可以通过View.findViewById() http://developer.android.com/reference/android/view/View.html#findViewById(int访问子视图。

例如,在活动/视图中:

代码语言:javascript
复制
...
private void init() {
  View child1 = findViewById(R.id.child1);
}
...

或者,如果您有对视图的引用:

代码语言:javascript
复制
...
private void init(View root) {
  View child2 = root.findViewById(R.id.child2);
}
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8395168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档