在我的活动中,我有名称的一些文本字段(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中描述并检查我的代码?
答案 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;
}