有没有选项可以在没有ViewGroups的情况下获取更多视图?

时间:2015-02-15 17:50:16

标签: android xml viewgroup

在Android中,您可以选择一个带有“id”的视图,但有没有选项可以选择更多视图(例如CSS中的“group”)?

例如,我想选择查看 TextView ,而不使用额外的LayoutView。 有没有Group-Tag?或者是否有任何其他选项不止一次使用id?

<View
        android:id="@+id/cardFront"
        android:layout_width="300dp"
        android:layout_height="407dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="@drawable/image"
/>
<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/string2"
/>

2 个答案:

答案 0 :(得分:0)

您无法在单个java语句中找到多个ID。您需要为这两个视图添加一个额外的父级。要同时选择ViewTextView,您可以将它们保存在ViewGroup中,然后尝试按ID查找。

答案 1 :(得分:0)

只要您意识到这一点,就可以复制ID而不会造成任何伤害。如果您不想使用ID,则有标记:

<View
    android:id="@+id/cardFront"
    android:tag="myTag"
    android:layout_width="300dp"
    android:layout_height="407dp"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:background="@drawable/image"
/>
<TextView
    android:tag="myTag"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/string2"
/>

默认情况下,没有方法可以获得多个视图,但这很简单:

public List<View> findViewsById(int id) {
    List<View> result = new ArrayList<>();
    List<ViewGroup> groups = new ArrayList<>();
    groups.add(this);
    while (!groups.isEmpty()) {
        ViewGroup group = groups.remove(0);
        for (int i = 0; i < group.getChildCount(); i++) {
            View child = group.getChildAt(i);
            if (child.getId() == id)
                result.add(child);
            if (child instanceof ViewGroup)
                groups.add((ViewGroup) child);
        }
    }
    return result;
}

public List<View> findViewsWithTag(Object tag) {
    List<View> result = new ArrayList<>();
    List<ViewGroup> groups = new ArrayList<>();
    groups.add(this);
    while (!groups.isEmpty()) {
        ViewGroup group = groups.remove(0);
        for (int i = 0; i < group.getChildCount(); i++) {
            View child = group.getChildAt(i);
            if (tag.equals(child.getTag()))
                result.add(child);
            if (child instanceof ViewGroup)
                groups.add((ViewGroup) child);
        }
    }
    return result;
}