2014-12-22 34 views
2

爲什麼我不能訪問靜態複選框對象?MainActivity中的片段靜態複選框NullPointer異常

MainActivity(這裏我想叫它)

if (color == 0) { 
    ColorFragment.yellow.setChecked(true); 
} 
... 

ColorFragment(如果它被初始化)

static RadioButton yellow; 

yellow = (RadioButton) getView().findViewById(R.id.yellow_button); 

我已經嘗試添加getApplicationContext(), getActivity()和他人getView()沒有運氣。

這是爲什麼造成這個NullPointerException

+0

確保在將ColorFragment附加到主活動後執行「ColorFragment」? –

+0

好主意,但即使在viewpager設置後顯然會設置它,它仍然會給出一個NullPointer。 – Michael

+0

「ColorFragment」在ViewPager中的位置是什麼? –

回答

0

的問題

變量yellow將返回null,因爲它是我想稱它爲後實例化。


我尋找的static可變MainActivity.color的在ColorFragmentonActivityCreated方法的值。

我同樣使用了switchcasesetChecked()

switch (MainActivity.color) { 
    case 0: 
     yellow.setChecked(true); 
     break; 
    case 1: 
... 
1

您絕對可以從ColorFragment類的外部訪問靜態RadioButton黃色成員變量。

問題出在這個成員變量被初始化爲非null的時候。由於您懶惰初始化此成員變量,有幾件事要注意:

1)在調用ColorFragment的onCreateView方法後,您必須確保只訪問ColorFragment.yellow,或者確保檢查爲null如果ColorFragment尚未調用onCreateView方法,則不會因NullPointerException而崩潰。

2)確保你真的有一個單選按鈕與您ColorFragment膨脹其內容視圖佈局內聲明的ID yellow_button。如果你不這樣做,findViewById(R.id.yellow_button)返回null,然後將yellow設置爲null,並且你將冒着NullPointerException的風險。

+0

你說得很對。它返回null。 我改變了我用if語句查找對象的方式並修復了它。 – Michael