Android Spinner数组适配器空指针异常

时间:2014-11-12 21:13:10

标签: android nullpointerexception spinner android-arrayadapter android-spinner

我目前正在创建带有字体列表的微调器,如下所示。

@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>

2 个答案:

答案 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