Android片段:调用Snipper的setAdapter()时出现空指针异常

时间:2019-10-23 08:29:08

标签: android android-fragments drop-down-menu android-arrayadapter

我正在使用片段创建应用程序。 底部导航菜单中的主要活动有3个片段。我在片段1的布局中添加了一个下拉 snipper 。 在主要活动中,我试图为该侦听器设置 adapter 。代码如下:

//In the main activity onCreate()
    snipper1 = findViewById(R.id.spinner_add);
             categories = new String[]{"Phones", "Laptops", "Tablets"};
            ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, categories);
            snipper1.setAdapter(adapter);

因为我没有在调用snipper.setAdapter() 之前在活动中初始化fragment1,并且我不想这样做,所以我得到了以下NullPointer异常:

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

我的备用问题是:

“如何通过活动为其子元素片段中的元素调用findViewById()?”

感谢您的回答!

2 个答案:

答案 0 :(得分:3)

尝试此代码,

Spinner spinner = (your view).findViewById(**your xml spinner view id**);
     List<String> list = new ArrayList<String>();
     list.add("Phones");
     list.add("Laptops");
     list.add("Tablets");
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>((here if you use Activity use **this** or in fragment use **getContext()**),
         android.R.layout.simple_spinner_item, list);(here put your spinner item xml)
     dataAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
     spinner.setAdapter(dataAdapter);

答案 1 :(得分:0)

注意: 直接在片段外部访问片段的视图不是一个好主意。您应该使用片段回调接口来处理此类情况并避免错误。以下方法可行,但不建议这样做,因为这不是一个好习惯。

您应该在Fragment的回调类中设置适配器:

@Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view =inflater.inflate(R.layout.fragment_add,container,false);
        Snipper snipper1= view.findViewById(R.id.spinner_add);

        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_dropdown_item, list);

        return view;
    }
相关问题