我目前正在创建带有字体列表的微调器,如下所示。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_custom_style_dialog, container, false);
mSpinnerFont = (Spinner) getActivity().findViewById(R.id.spinnerFont);
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_spinner_item,
new String[] {"System Font", "Helvetica", "Helvetica-Neue", "Impact"});
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mSpinnerFont.setAdapter(arrayAdapter);
return view;
}
但是,它在最后一行抛出空指针异常。我不明白数组如何具有空值。谢谢你的回复。
下面的Spinner XML
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.richluick.blocnotes.CustomStyleDialogFragment">
<Spinner
android:id="@+id/spinnerFont"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>
答案 0 :(得分:2)
这一行:
getActivity().findViewById(R.id.spinnerFont);
从根视图中查找与活动关联的视图(由 Activity.setCurrentView()设置),而您的微调器位于您刚刚从文件中膨胀的视图内(它未放置到活动的视图层次结构)。修复您的代码:
view.findViewById(R.id.spinnerFont);
答案 1 :(得分:-1)
1)我已删除
xmlns:tools="http://schemas.android.com/tools"
和
tools:context="com.richluick.blocnotes.CustomStyleDialogFragment"
我测试了你的代码,它完美无缺!我想问题出在
xmlns:tools="http://schemas.android.com/tools"
尝试将其更改为
xmlns:tools="http://schemas.android.com/apk/res-auto"
2)如果您的问题没有解决,可能您的 FrameLayout 未包含在活动视图中。所以
getActivity().findViewById(R.id.spinnerFont);
将始终返回 Null