我有一個名爲ActionButton的自定義按鈕,我試圖獲取對並行視圖層次結構中的另一個視圖的引用。我想過使用findViewById(int id)
,但我一直收到NullPointerExceptions
,所以我試圖通過getRootView()
獲得對RootView的引用,並從那裏獲得與findViewById(int id)
的視圖。現在的問題是getRootView
而不是返回佈局或null,它返回我的ActionButton調用該方法。查看getRootView返回自己
這裏是我的ActionButton,在那裏我試圖讓參考:
public class ActionButton extends Button {
protected void onFinishInflate(){
super.onFinishInflate();
log(getRootView() == this) //true, what I don't understand...
ConnectionLayer connectionLayer = (ConnectionLayer) findViewById(R.id.connection_layer); //Returns null...
}
}
而且我layout.xml文件的概述:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
(much more xml elements)
<com.cae.design.reaction.ui.ActionButton
android:id="@+id/actionButton"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_gravity="center_vertical" />
</LinearLayout>
<com.cae.design.reaction.ui.ConnectionLayer
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/connection_layer"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</com.cae.design.reaction.ui.ConnectionLayer>
</FrameLayout>
我真的很感激,如果你能向我解釋爲什麼getRootView
返回視圖本身,或者可以給我一個提示,我可以如何以任何其他方式引用它。
不,這也行不通。當我調用'getParent'時,它返回null,所以它看起來像問題是我的ActionButton沒有添加到視圖層次結構。但是我認爲當onFinishInflate方法被調用時,佈局會完成... – Artjom
嗯,可能需要在後面的調用中做你的邏輯,比如'onPreDraw'或'onAttatchedToWindow'或類似的東西。 – wsanville