如何从root视图使用findViewWithTag检索视图?

时间:2017-11-22 15:03:53

标签: android

我有一个复杂的动态视图,包含多个子级和父级。 我正在使用settags为视图设置标签。 一个EditText视图的标记值为“1”。

当我尝试使用findViewWithTag检索View时,我得到空响应。

以下是我的代码。

//Set Tag 
EditText editText = new EditText(getApplicationContext());
            LinearLayout.LayoutParams editTextParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            editText.setLayoutParams(editTextParams);
            editText.setPadding(0,eight,0,eight);
            editText.setTag("1");

// Get Tag
EditText et =(EditText)home.getRootView().findViewWithTag("1");

1 个答案:

答案 0 :(得分:0)

我通过使用以下方法解决了它。由于每个视图都有一个唯一的ID,因此我将视图放在ArrayList的第一个位置,用于每个标记。

 private static ArrayList<View> getViewsByTag(ViewGroup root, String tag){
    ArrayList<View> views = new ArrayList<View>();
    final int childCount = root.getChildCount();
    for (int i = 0; i < childCount; i++) {
        final View child = root.getChildAt(i);
        if (child instanceof ViewGroup) {
            views.addAll(getViewsByTag((ViewGroup) child, tag));
        }

        final Object tagObj = child.getTag();
        if (tagObj != null && tagObj.equals(tag)) {
            views.add(child);
        }

    }
    return views;
}