我有一個自定義視圖MyView
從my_view.xml
(與相應的Java類MyView.java
)膨脹。Android和使這個按鈕之一的這個監聽器
我覆蓋MyView(Context context, AttributeSet attrs)
將子視圖連接到類的成員。
現在其中一個子視圖是Button
,我希望我的視圖可以在將此事件傳遞給委託之前監聽其按鈕的點擊。但是如果我在構造函數中MyView(Context context, AttributeSet attrs)
(其中this
是MyView
一個實例),我收到了NullPointerException
聲明
this.myButton.setOnClickListener(this);
。
MyClass.java
哪裏可以撥打this.myButton.setOnClickListener(this);
?
%%
編輯。有些代碼:
public MyView(Context ctx, AttributeSet attrs)
{
super(context, attrs);
this.myButton = (Button) this.findViewById(R.id.my_button);
this.myButton.setOnClickListener(this); // Raises null pointer;'id' is correct.
}
基本上,只有在myButton被初始化之後纔會被調用。 – aroth
你能詳細說明一下嗎?這並沒有太大的幫助。例如,一旦'super(ctx,attr)'被調用了''myButton'沒有被初始化?在調用'MyView'的'super'之後,我調用'this.myButton.setOnClickListener(this);'。 – SK9
我不知道Android如何加載視圖的確切細節,但我認爲這是合理的,假設它沒有多線程的過程。如果是這種情況,那麼在你的構造函數返回之前,'myButton'不能爲非null,除非你自己在你的構造函數中手動設置按鈕。對super()的調用在很大程度上是不相關的,因爲超類可能不知道或關心'myButton'。 – aroth