首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >方法来获取视图中的所有EditTexts

方法来获取视图中的所有EditTexts
EN

Stack Overflow用户
提问于 2011-10-17 15:16:42
回答 4查看 31.1K关注 0票数 21

有没有人可以帮我编写一个方法,让所有的EditTexts都出现在一个视图中?我想在这里实现htafoya发布的解决方案:How to hide soft keyboard on android after clicking outside EditText?

不幸的是,getFields()方法丢失了,并且htafoya没有响应我们分享他的getFields()方法的请求。

EN

回答 4

Stack Overflow用户

发布于 2011-11-04 19:36:48

这是我写的一个方法,用来递归地检查ViewGroup的所有EditText子代,对于我必须做的长注册表单来说很方便,而且可能更易于维护。

代码语言:javascript
复制
private EditText traverseEditTexts(ViewGroup v)
{
    EditText invalid = null;
    for (int i = 0; i < v.getChildCount(); i++)
    {
        Object child = v.getChildAt(i); 
        if (child instanceof EditText)
        {
            EditText e = (EditText)child;
            if(e.getText().length() == 0)    // Whatever logic here to determine if valid.
            {
                return e;   // Stops at first invalid one. But you could add this to a list.
            }
        }
        else if(child instanceof ViewGroup)
        {
            invalid = traverseEditTexts((ViewGroup)child);  // Recursive call.
            if(invalid != null)
            {
                break;
            }
        }
    }
    return invalid;
}

private boolean validateFields()
{   
    EditText emptyText = traverseEditTexts(mainLayout);
    if(emptyText != null)
    {
        Toast.makeText(this, "This field cannot be empty.", Toast.LENGTH_SHORT).show();
        emptyText.requestFocus();      // Scrolls view to this field.
    }
    return emptyText == null;
}
票数 10
EN

Stack Overflow用户

发布于 2011-10-17 15:23:08

可以通过调用View#getFocusables来实现这一点,它将返回一个视图中所有可聚焦视图的数组列表。

然后,您可以使用(instanceof)检查它们是否为EditTexts,或者对所有它们执行操作。

票数 6
EN

Stack Overflow用户

发布于 2016-05-08 08:08:51

这个方法递归地遍历所有ViewGroups并收集它们的TextViews。我用它来给所有的TextViews分配一个新的颜色(即使是那些嵌入到预定义的小部件中的小部件,比如Switch等,这些小部件都使用了TextViews)

代码语言:javascript
复制
private HashSet<TextView> getTextViews(ViewGroup root){
    HashSet<TextView> views=new HashSet<>();
    for(int i=0;i<root.getChildCount();i++){
        View v=root.getChildAt(i);
        if(v instanceof TextView){
            views.add((TextView)v);
        }else if(v instanceof ViewGroup){
            views.addAll(getTextViews((ViewGroup)v));
        }
    }
    return views;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7790487

复制
相关文章

相似问题

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