我正在使用片段创建应用程序。 底部导航菜单中的主要活动有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()
?”
感谢您的回答!
答案 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;
}