2012-11-13 68 views
2

给定一个非空的ViewGroup对象v,我们可以说,v.getChildAt(0)不会返回NULL?getChildAt(0)是否会返回null?

如果它可以返回空值,将在该视图层次结构是什么样子?

+0

为什么这个否决?我认为这是一个有效的问题。我无法想象这样的视图层次甚至会是什么样子。 –

+1

*真实*问题是什么?我问这个,因为当然你可以有一个ViewGroup没有孩子,所以v.getChildAt(0)永远不会返回null。至于“层次结构是什么样子?”。什么层次?如果我使用单个ViewGroup定义布局,请启动一个活动并使该布局膨胀,然后布局*就是层次结构。我可能会这样做,因为我打算稍后在我的代码中创建视图并将它们添加到当前视图根目录。在充气和添加子视图的时候,getChildAt(0)是未定义的。 – Simon

+0

@teepee你的回答没有错,只是不完整。我想你应该添加一个注释,说明源代码已更改并将您的答案带回。 – Sam

回答

0

如果您有类似

<ListView 
    android:id="@+id/listview" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
</ListView> 
在布局

,并做

ListView v = (ListView) findViewById(R.id.listview); 
View view = v.getChildAt(0); 
// view is null 

你有ViewGroup对象v其中v.getChildAt(0)null。因为ListView将不会有任何孩子,直到你给它的数据显示。

另外,你可以只创建一个空LinearLayout作为占位符或帧的动态内容。

如果没有明确说明,它不能返回null,你最好期望或墨菲定律会打你。

+0

这是一个很好的答案。非常感谢!对于同一个'getChildAt'调用,根视图是否可能返回'null'? –

+0

我没有一个例子如何做到这一点,但它应该可能以某种方式,也许如果你'setContentView(null)'。 – zapl

7

是,根据该文件,​​它返回:

在指定的位置上的视图或零,如果位置不组

0

是内部存在,它可以返回空值。

我认为你真正的问题是,是否会不会发生什么当它这个意思。这意味着视图组没有任何孩子。为什么视图组可能没有孩子?我不知道。也许在您试图抓取对第一个孩子的引用之前,视图层次结构已经发生了变化。