片段无法转换为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
无法转换为Context
, Activity
可以。
所以你应该改变
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()
方法。
您也可以直接从onCreateView
的ViewGroup
获取它。 如果你这样走,你就不会得到null
因为你可以从getActivity()
获得( 只要你之前为用户界面视图实例化它 )。
fragment_context = container.getContext();