Android:如何获取父视图的ID?

14

View.getRoot()返回View,因此我们可以通过使用getResourceName(View.getId())轻松找出根视图。

View.getParent()...虽然我期望它也返回父级的View,但实际上它只返回一个ViewParent实例,似乎只有极少量有用的方法和字段。这很糟糕。

那么,有没有办法知道父对象的ID呢?我相信View的父级也是View,因此它应该具有mID字段。

我真的很想知道为什么Google不让View.getParent()直接返回View。这是有意义的,只有当除了View之外的其他东西可能是父级时才能如此,据我所知,这仅限于View及其子类。


View.getId() 返回 View 的名称,而 View.getClass().getName() 返回 View 类型的名称。 - ρяσѕρєя K
3个回答

19

ViewParent 是一个接口,任何能够包含子 View 的 View 都会实现这个接口。大多数情况下,你获取的类都会是 ViewGroup 的实例,比如 LinearLayoutRelativeLayout。我不确定你所说的“名称”具体指什么,但如果你想要获取类名,你可以像往常一样这样做:view.getParent().getClass().getName()


10
如果你想获取这个ID,首先需要将其转换为一个ViewGroup。请注意,这并不是百分之百安全的,因为它也可能是ViewRootImpl,但我怀疑在实践中你不会遇到那种情况。所以,使用((ViewGroup)view.getParent()).getId()来获取ID。 - dmon

6

文档指出父级不一定是一个View

public final ViewParent getParent ()

在API level 1中添加 获取此视图的父级。请注意,父级是ViewParent而不一定是View。

返回此视图的父级。

然而,ViewParent的所有实现都继承自View。这应该是一种设计决策,使用ViewParent接口将父级与View解耦,尽管SDK中的所有实现都是视图。


3

首先尝试进行转换。例如,如果你想获取的 View 的父容器是 TableRow,则执行以下操作:

((TableRow)View.getParent()).getID()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接