2016-07-23 52 views
0

爲什麼this在下面的片段中給我一個錯誤?「this」給我一個錯誤片段

這是我的代碼:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
       this, android.R.layout.simple_spinner_item, spinnerArray); 
+1

是類,這行代碼的類型'Context'因爲如果沒有,那麼你不能只在任何情況下使用'this' –

+2

,這是錯誤?請更具體。 – Lino

+0

活動是一個上下文對象。碎片不是。 –

回答

0

更換thisthis.getContext(),甚至只是簡單地getContext()

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), 
            android.R.layout.simple_spinner_item, spinnerArray); 

其原因是在於一個ArrayAdapter對象的構造是這樣的,

https://developer.android.com/reference/android/widget/ArrayAdapter.html

ArrayAdapter(Context context, int resource, T[] objects) 

ArrayAdapter(Context context, int resource, List<T> objects) 

了可能發生的事情之前是該代碼行是班上最有可能不是Context類型;因此,不能單獨使用this作爲構造ArrayAdapter的參數。如果getContext()不起作用,那麼我建議嘗試getActivity()getApplicationContext()以及。

-2

您可以嘗試getActivity().getApplicationContext()而不是僅使用this的片段。

+0

僅當片段是嵌套類 –

1

試試這個:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
      getActivity(), android.R.layout.simple_spinner_item, spinnerArray); 
  • getContext()僅在API 23增加了,應當只有少數設備的工作(因爲版本的Android M仍然沒有一個巨大的市場份額)。

  • getActivity()被添加到API 11,它不被棄用。所以,你可以使用它。

+1

getContext()存在於android.support.v4.app.Fragment中時,所以這裏沒有任何問題。 – Divers

+0

假設他使用的支持片段可能不總是這樣的情況 – W0rmH0le

+0

是的,但我認爲它幾乎是不可能的,甚至在目前情況下不使用支持庫 – Divers

0

使用getActivity()它返回片段與之關聯的活動的上下文。

所以,你的代碼變得

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, spinnerArray);`]