2012-11-13 117 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

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

我認爲你真正的問題是,是否會不會發生什麼當它這個意思。這意味着視圖組沒有任何孩子。爲什麼視圖組可能沒有孩子?我不知道。也許在您試圖抓取對第一個孩子的引用之前,視圖層次結構已經發生了變化。

相關問題