我正在制作一个程序,它将在 fragment 而不是 Activity 中包含 Spinner。我研究过为什么这可能会崩溃,但无济于事。我最初担心的是 .getView().findViewById(),但现在我不太确定这就是问题,因为 .这是代码。
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;
}
关于java - Spinner Fragment 不断崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45156167/