2017-07-18 110 views
0

我正在制作一个程序,将一个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(); 

     } 
    }); 

回答

1

没有看到堆栈跟踪我不能肯定地说,但我怀疑这条线崩溃:

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; 
}