在 Fragment 中使用 Spinner 和 Adapter

Posted

技术标签:

【中文标题】在 Fragment 中使用 Spinner 和 Adapter【英文标题】:Use Spinner and Adapter in Fragment 【发布时间】:2018-04-10 01:57:14 【问题描述】:

我在 Activity 中运行以下代码时工作但我在 Fragment 中运行以下代码时不起作用。我需要在 Fragment 中使用此代码。我是初学者。请帮帮我。

片段中的代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    view = inflater.inflate(R.layout.fragment_filter, container, false);

    Spinner categorySpinner = (Spinner) container.findViewById(R.id.category_spinner);
    ArrayAdapter<CharSequence> categoryAdapter = ArrayAdapter.createFromResource(getContext(), R.array.cat, R.layout.row_spinner);
    categorySpinner.setAdapter(categoryAdapter);

    return view;

我将getContext() 更改为getActivity()thisthis.getActivity 但不起作用。

错误(categorySpinner.setAdapter(categoryAdapter):

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)' on a null object reference

【问题讨论】:

【参考方案1】:
Spinner categorySpinner = (Spinner) view.findViewById(R.id.category_spinner);

使用视图代替容器

【讨论】:

【参考方案2】:

您正在尝试调用空对象的方法,因为您没有为片段获取正确的上下文。

更改以下行:

Spinner categorySpinner = (Spinner) container.findViewById(R.id.category_spinner);

收件人:

Spinner categorySpinner = (Spinner) getActivity().findViewById(R.id.category_spinner);

【讨论】:

不起作用并向我显示错误:java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)' on a null object reference 您是否在 xml 中为 category_spinner 设置了正确的活动上下文?

以上是关于在 Fragment 中使用 Spinner 和 Adapter的主要内容,如果未能解决你的问题,请参考以下文章

Spinner 侦听器 LiveData 问题

根据另一个 Spinner 选择 (LiveData) 过滤 Spinner 的 Observed ViewModel 数据

RecyclerView 最初不加载数据

Android控件之Spinner简单使用

下拉框(Spinner)

Android-----spinner组件使用(实现下单)