2013-07-03 28 views
0

對象我試圖實例3個對象按鈕事件處理函數中使用:範圍錯誤實例上面的setContentView的Java

// Instantiate class objects 
    final TimePicker timePicker = (TimePicker) findViewById(R.id.tp_selTime); 
    final CheckBox cb_filterTime = (CheckBox) findViewById(R.id.cb_filterByTime); 
    final DatePicker datePicker = (DatePicker) findViewById(R.id.dp_filterTime); 

我開始從MainActivity.java稱爲FilterTimeActivity.java的活動。很顯然,我需要什麼之前做super.onCreatesetContentView,當我移動上述3個對象爲public class FilterTimeActivity extends Activity {OnCreate()之外崩潰。

有沒有一種辦法範圍這個正確的,所以我可以從這種方法訪問這些對象:

public void filterResults(View view){} 

這是從一個按鈕監聽器(而不是從另一種方法被調用)

+0

使這個變量的全局和不初始化它們(即,外面的onCreate),你可以使用它們任何你想要 – CRUSADER

+0

感謝您的評論,切切實實的我有,雖然初始化對象? –

+1

看@Ken狼回答,那是我的意思.. – CRUSADER

回答

2

剛打電話聲明爲您Activity(外onCreate())成員變量。

把這些外部onCreate(),在類的頂部:

TimePicker timePicker; 
CheckBox cb_filterTime; 
DatePicker datePicker; 

然後在onCreate()

timePicker = (TimePicker) findViewById(R.id.tp_selTime); 
cb_filterTime = (CheckBox) findViewById(R.id.cb_filterByTime); 
datePicker = (DatePicker) findViewById(R.id.dp_filterTime); 

他們對外宣稱,但裏面初始化。你可以在任何地方使用它們。

+0

謝謝!聽起來更加簡單,比我在想,我將標誌着作爲第二:)你會介意解釋爲什麼這並不崩潰,但他們實例外不接受? –

+0

'findViewById'需要'setContentView'和否則將返回null。這基本上就是系統如何建立起來的。 –