2014-03-03 26 views
0

我有一個在android的開關集合;讓我們給他們打電話......爲什麼我的數組視圖返回null?

Switch one; 
Switch two; 
Switch three; 
Switch four; 
Switch five; 

我也有一個包含這些視圖的數組。

Switch[] switchArray = {one, two, three, four, five}; 

然後,在我的onCreateView()方法中;我使用findViewById()分配所有這些開關。

one = (Switch) findViewById(R.id.switchOne); 
two = (Switch) findViewById(R.id.switchTwo); 
three = (Switch) findViewById(R.id.switchThree); 
four = (Switch) findViewById(R.id.switchFour); 
five = (Switch) findViewById(R.id.switchFive); 

現在;當我創建一個for循環檢查,如果該數組爲null:

for(int i = 0; i<switchArray.length; i++){ 
     if(switchArray[i] == null){ 
     Log.d(TAG, "Array is null at:" + i); 
    } 
    } 

我得到以下的logcat:

Array is null at: 1 
Array is null at: 2 
Array is null at: 3 
Array is null at: 4 
Array is null at: 5 

而且我不確定,爲什麼這些變量返回null,如果我試圖在onCreate中實例化它們...如果我也嘗試在onCreate之前實例化它們(在任何方法之前的類頭文件中);我仍然得到同樣的錯誤。

希望問題清楚。

編輯1:FULL ONCREATEVIEW方法

public View onCreateView(LayoutInflater viewInflation, ViewGroup container, 
      Bundle SavedInstantState) { 
     superContext = getActivity().getApplicationContext(); 
     digitalfragmentview = viewInflation.inflate(
       R.layout.digitalfragment_page, container, false); 

     digitalIO0Mode = (Switch) digitalfragmentview 
       .findViewById(R.id.digitalio0mode); 
     digitalIO1Mode = (Switch) digitalfragmentview 
       .findViewById(R.id.digitalio1mode); 
     digitalIO2Mode = (Switch) digitalfragmentview 
       .findViewById(R.id.digitalio2mode); 
     digitalIO3Mode = (Switch) digitalfragmentview 
       .findViewById(R.id.digitalio3mode); 
     digitalIO4Mode = (Switch) digitalfragmentview 
       .findViewById(R.id.digitalio4mode); 
     digitalIO5Mode = (Switch) digitalfragmentview 
       .findViewById(R.id.digitalio5mode); 
     digitalIO6Mode = (Switch) digitalfragmentview 
       .findViewById(R.id.digitalio6mode); 
     digitalIO7Mode = (Switch) digitalfragmentview 
       .findViewById(R.id.digitalio7mode); 
     digitalIO8Mode = (Switch) digitalfragmentview 
       .findViewById(R.id.digitalio8mode); 
     digitalIO9Mode = (Switch) digitalfragmentview 
       .findViewById(R.id.digitalio9mode); 

     // sets the listener for the mode switches 
     for (int i = 0; i < digitalIOModeSwitchArray.length; i++) { 
      if (digitalIOModeSwitchArray[i] == null) { 
       Log.d(TAG, "Array is null at:" + i); 
      } 
     } 

     return digitalfragmentview; 
    } 
+0

你什麼時候實例化switchArray?你需要在你執行「findViewById」調用之後實例化它。 – dymmeh

+0

switchArray在onCreateView()之前被實例化。在所有其他類變量的類的頂部。 – Tukajo

+0

在我的最新版本; digitalIO0Mode相當於Switch One;等等...... – Tukajo

回答

3
Switch[] switchArray = {one, two, three, four, five}; 

包含在您創建數組的時刻one, two, three, four, five引用。

後面,你重新分配這些變量,但你的數組仍然指向前面的引用。

您需要創建數組您分配您的意見後:

one = (Switch) findViewById(R.id.switchOne); 
two = (Switch) findViewById(R.id.switchTwo); 
three = (Switch) findViewById(R.id.switchThree); 
four = (Switch) findViewById(R.id.switchFour); 
five = (Switch) findViewById(R.id.switchFive); 
// Then only 
switchArray = {one, two, three, four, five}; 
+0

有沒有一種方法可以在我的類中使用方法訪問該數組,然後如果它現在超出了我的類中其他方法的範圍? – Tukajo

+0

您是否收到評論通知? – Tukajo

+0

你不需要改變它的範圍。你可以聲明它是你的類的成員,並且仍然在onCreate方法中定義它。 – njzk2

1

試試這個..

one = (Switch) findViewById(R.id.switchOne); 

而不是這個..

one = findViewById(R.id.switchOne); 

編輯

switchArray[0] = (Switch) findViewById(R.id.switchOne); 
+0

我的歉意;我已經讓我錯誤地格式化了我的代碼。請參閱我的最新更新。 – Tukajo

+0

@Tukajo你可以發佈完整的'onCreateView()' – Hariharan

+0

添加已完成。 – Tukajo

2

先取到你的widget的引用變量 one = (Switch) findViewById(R.id.switchOne); two = (Switch) findViewById(R.id.switchTwo); three = (Switch) findViewById(R.id.switchThree); four = (Switch) findViewById(R.id.switchFour); five = (Switch) findViewById(R.id.switchFive);

然後把它們放入數組

Switch[] switchArray = {one, two, three, four, five};

原因是開關數組的值類型不是引用類型