Android ViewParent是否保证是Viewgroup?

时间:2015-01-03 22:09:20

标签: android android-view

是否存在View.getParent()返回不属于ViewGroup类型的对象的真实情况?或者我可以安全地投射它而不首先检查它的类型,如下面的代码示例中所示?

 if (getParent() == null){
     throw new IllegalStateException("View does not have a parent, it cannot be rootview!");
 }
 ViewGroup parent = (ViewGroup) getParent();

3 个答案:

答案 0 :(得分:7)

如果比较ViewGroupViewParent的直接和间接子类,它们看起来是一样的(考虑到ViewGroup本身)。

在某些自定义库中,您可能会从getParent() ViewParent得到ViewGroup而不是{{1}}。这是真的吗?

所以 - 如果你不能确定父类型,你最好检查一下。
- 在普通应用程序中,您通常了解父母是或可以是什么 - 所以您可以跳过检查

答案 1 :(得分:4)

安全。 Android SDK中ViewParent的每个实现都是ViewGroup

但请记住,instanceof也会检查无效性。你可以写:

if (!(getParent() instanceof ViewGroup)){
  throw new IllegalStateException("View does not have a parent, it cannot be rootview!");
}
ViewGroup parent = (ViewGroup) getParent();

答案 2 :(得分:2)

如果你不做任何想象,那应该是安全的。唯一不安全的情况是当你到达视图的根部时。 ViewParent将是ViewRootImpl