如何通过迭代Activity的元素来区分一个字段和另一个字段?

时间:2015-09-15 08:24:12

标签: android android-layout

在我的活动中,我有名称的一些文本字段(EditText)和电话号码的一些字段。 我有函数来获取Activity的一部分的所有元素:

public static List<View> getAllChildren(View v) {
    ArrayList<View> resultViewList = getOneIfNotGroup(v);
    if (!resultViewList.isEmpty()) return resultViewList;

    ViewGroup viewGroup = (ViewGroup) v;
    for (int i = 0; i < viewGroup.getChildCount(); i++) {
        View child = viewGroup.getChildAt(i);

        // Get nested children
        List<View> childViewList = new ArrayList<View>();
        childViewList.add(v);
        childViewList.addAll(getAllChildren(child));

        resultViewList.addAll(childViewList);
    }

    return resultViewList;
}

private static List<View> getOneIfNotGroup(View v) {
    boolean notGroup = !(v instanceof ViewGroup);
    if (notGroup) {
        ArrayList<View> viewArrayList = new ArrayList<View>();
        viewArrayList.add(v);
        return viewArrayList;
    }
    return new ArrayList<>();
}

并按类过滤此列表的功能:

public static<T> List<T> getFiltered(List<?> list, Class<T> myClass) {
    List<T> result = new ArrayList<T>();
    for (Object elem : list)
        if (myClass.isInstance(elem))
            result.add((T) elem);
    return result;
}

例如List<EditText> fields = getFiltered(allElementsList, EditText.class); 但在这种情况下,名称电话号码字段都将在此列表中。

那么,我怎样才能检查它们中的一种(名字或数字)? 也许有一些属性(比如CSS类)我可以在xml中描述并检查我的代码?

1 个答案:

答案 0 :(得分:1)

您可以使用&#34;标记&#34;通过以下方式区分两个EditText

为不同的EditText设置一些不同的文字,例如

edtName.setTag("name");
edtTelephone.setTag("tele");
edtXyz.setTag("xyz");

在布局中使用

android:tag="name"

确保为布局中使用的每个EditText提供标记。

现在,在您的getFiltered()方法中,您可以检查它是哪种标记

public static<T> List<T> getFiltered(List<?> list, Class<T> myClass,String tag) {
    List<T> result = new ArrayList<T>();
    for (Object elem : list)
        if (myClass.isInstance(elem)){
            if(myClass.isInstance(EditText.class)){

                //Following is logic to check EditText with tag
                String edtTag = ((EditText)elem).getTag().toString();

                if(edtTag.equals(tag)){
                    result.add((T) elem);
                }

            }else {
                result.add((T) elem);
            }
        }
    return result;
}