按ID查找列表项根视图

时间:2014-02-24 09:12:19

标签: android android-layout android-view

如何按ID查找列表项的根视图?

例如:

活动布局:

<LinearLayout android:id="@+id/activity_root">
    <FrameLayout android:id="@+id/activity_2">
        <FrameLayout android:id="@+id/activity_3">
            <ListView android:id="@android:id/list" />
        </FrameLayout>
    </FrameLayout>
</LinearLayout>

列出项目布局:

<RelativeLayout android:id="@+id/item_root">
    <FrameLayout android:id="@+id/item_2">
        <FrameLayout android:id="@+id/item_3">
            <Button android:id="@+id/item_button" />
        </FrameLayout>
    </FrameLayout>
</RelativeLayout>

现在我需要在按钮点击上添加一些操作。我只有按钮视图。我如何获得item_root视图?

3 个答案:

答案 0 :(得分:1)

试试这个递归函数

 View getParent(View view, int targetId) {
    System.out.println(view.getId() +" == "+ targetId);
    if (view.getId() == targetId) {
        return view;
    }
    View parentView = (View) view.getParent();
    if (parentView == null) {
        return null;
    }
    return getParent(parentView, targetId);
}

答案 1 :(得分:0)

你可以使用

view.getParent() 

找到外部父项,对于大多数外部视图,您需要调用一些并进行检查控制。

答案 2 :(得分:0)

在onClick中使用参数获取根视图,即查看并调用view.getRoot视图,但是如果它是一个列表视图,你可以去追踪但是将活动即Activity.this传递给适配器并找到这样的根视图:

mActivity.getWindow().getDecorView().findViewById(android.R.id.content)

感谢任何反馈。