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

Android片段:为Snipper调用setAdapter()时出现空指针异常,android,android-fragments,drop-down-menu,android-arrayadapter,Android,Android Fragments,Drop Down Menu,Android Arrayadapter,我正在使用片段创建一个应用程序。 我的主要活动有三个片段,从底部的导航菜单中弹出。我在片段1的布局中添加了一个下拉菜单snipper。 在主要活动中,我试图为该snipper设置适配器。代码如下: //In the main activity onCreate() snipper1 = findViewById(R.id.spinner_add); categories = new String[]{"Phones", "Laptops", "Tablets"}

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

//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);
我的另一个问题是:

“如何从活动中调用
findViewById()
,以获取其子片段中存在的元素?”

谢谢你的回答

试试这个代码

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);
微调器微调器=(您的视图).findViewById(**您的xml微调器视图id**);
列表=新的ArrayList();
列表。添加(“电话”);
列表。添加(“笔记本电脑”);
列表。添加(“片剂”);
ArrayAdapter dataAdapter=新的ArrayAdapter((此处,如果您使用活动,请使用**this**或在片段中使用**getContext()**),
android.R.layout.simple\u微调器\u项目,列表);(此处放置微调器项xml)
dataAdapter.setDropDownViewResource(android.R.layout.simple\u dropdown\u item\u 1line);
spinner.setAdapter(dataAdapter);
注意: 在片段外部直接访问片段的视图不是一个好主意。您应该使用片段回调接口来处理此类情况并避免bug。以下方法可行,但不推荐使用,因为这不是一种好的做法

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

@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;
    }
@Nullable
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图=充气机。充气(右布局。碎片添加,容器,错误);
Snipper snipper1=view.findviewbyd(R.id.spinner\u add);
ArrayAdapter dataAdapter=新的ArrayAdapter(getContext(),android.R.layout.simple\u微调器\u下拉菜单\u项,列表);
返回视图;
}

您可以设置一个xml文件吗?您什么时候初始化您的片段?您的微调器在片段中,并且您正在尝试从活动中查找视图和附加适配器。您将始终得到null。请尝试使用接口进行片段和活动通信。感谢您的回复。在片段getView()中,findViewById()给出错误:“无法访问语句”
@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;
    }