片段无法转换为Context

这是我第一次使用片段(android dev的新手),我正在尝试设置一个微调器。 目前我对上下文很困惑,似乎无法解决这个错误:

Error:(52, 78) error: incompatible types: HotkeysFragment cannot be converted to Context 

这是它所指的代码:

HotkeysFragment.java

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } Spinner hotkey_selector_spinner = (Spinner) rootView.findViewById(R.id.hotkey_selector_spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.hotkey_options, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); hotkey_selector_spinner.setAdapter(adapter); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View rootViewB = inflater.inflate(R.layout.fragment_hotkeys, container, false); rootView = rootViewB; return rootViewB; } 

具体路线是:

 ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.hotkey_options, android.R.layout.simple_spinner_item); 

import:

 import android.app.Activity; import android.net.Uri; import android.os.Bundle; import android.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Spinner; import java.util.zip.Inflater; 

我怎样才能解决这个问题?

来自此处的片段Android文档:

警告:如果在Fragment中需要Context对象,则可以调用getActivity()。 但是,只有在片段附加到活动时才要小心调用getActivity()。 当片段尚未附加,或在其生命周期结束时被分离时,getActivity()将返回null。

因此,除了this更改为getActivity() ,我还建议您在onActivityCreated()使用getActivity() onActivityCreated() (因为您还需要先将视图充气)

 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (getArguments() != null) { mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } Spinner hotkey_selector_spinner = (Spinner) getView().findViewById(R.id.hotkey_selector_spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.hotkey_options, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); hotkey_selector_spinner.setAdapter(adapter); } 

更改

 ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.hotkey_options, android.R.layout.simple_spinner_item); 

 ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.hotkey_options, android.R.layout.simple_spinner_item); 

使用getActivity()访问片段中的上下文

Fragment无法转换为ContextActivity可以。

所以你应该改变

 ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.hotkey_options, android.R.layout.simple_spinner_item); 

 ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.hotkey_options, android.R.layout.simple_spinner_item); 

访问任何Fragment context的正确方法是使用getActivity()方法。

您也可以直接从onCreateViewViewGroup获取它。 如果你这样走,你就不会得到null因为你可以从getActivity()获得( 只要你之前为用户界面视图实例化它 )。

 fragment_context = container.getContext();