Spinner片段不断崩溃
问题描述:
我正在制作一个程序,将一个Spinner包含在片段中而不是活动中。我研究了为什么这可能会崩溃,但无济于事。我最初的担心是.getView()。findViewById(),但现在我不太确定这是问题所在,因为。这是代码。Spinner片段不断崩溃
public class Add extends Fragment {
public Add() {
// Required empty public constructor
}
ArrayList<String> ingredients = new ArrayList<>();
SpinnerDialog spinnerDialog;
Button add;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
add = (Button) getView().findViewById(R.id.add);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
spinnerDialog.showSpinerDialog();
}
});
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_add, container, false);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
spinnerDialog = new SpinnerDialog(getActivity(), ingredients, "Select An Ingredient");
spinnerDialog.bindOnSpinerListener(new OnSpinerItemClick() {
@Override
public void onClick(String Ingredient, int i) {
Toast.makeText(Add.super.getContext(), "Selected ", Toast.LENGTH_SHORT).show();
}
});
答
没有看到堆栈跟踪我不能肯定地说,但我怀疑这条线崩溃:
add = (Button) getView().findViewById(R.id.add);
这是因为getView()
将返回onCreateView()
返回的View
实例...但你目前里面的onCreateView()
,所以getView()
将返回null
。
你可以按照如下方式重新编写你的onCreateView()
,它应该可以工作。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_add, container, false);
add = (Button) root.findViewById(R.id.add);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
spinnerDialog.showSpinerDialog();
}
});
return root;
}