Fragment上的spinner.setAdapter(Adapter)中的NullPointerException

时间:2016-04-02 01:27:34

标签: java android android-spinner

大家好,我试图在我的片段上制作一个简单的微调器,但我厌倦了在没有任何工作解决方案的情况下搜索互联网。这是我的代码

public class AddMedicament extends Fragment  {




public AddMedicament() {
    // Required empty public constructor

}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_search_pharmacy, container, false);
    Spinner spinner = (Spinner) view.findViewById(R.id.type_spinner);
    ArrayList<String> categories = new ArrayList<String>();
    categories.add("g");
    categories.add("mg");
    categories.add("ml");
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(getActivity().getApplicationContext(), android.R.layout.simple_spinner_item,categories);
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    spinner.setAdapter(dataAdapter);



    //}

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String item = parent.getItemAtPosition(position).toString();
            Toast.makeText(parent.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
    return view;
}

}

我仍然将nullPointExeption发送到spinner.setAdapter(dataAdapter);

修改 我发现这是一个愚蠢的错误,它在这里我使用了不同的布局

我正在使用它:

View view = inflater.inflate(R.layout.fragment_search_pharmacy, container, false);

它应该是R.id.type_spinner存在的布局

 View view = inflater.inflate(R.layout.fragment_add_medicament, container, false);

2 个答案:

答案 0 :(得分:0)

我认为问题出在这里

ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_spinner_item,categories);

应该是

getActivity().getAppicationContext()

要为微调器创建适配器,您不需要应用程序的上下文。因此,即使您有一个扩展应用程序的类,TextView textView = new TextView(context); textView.setText("Hello World"); 也是错误的。

答案 1 :(得分:0)

  

我仍然将spinner.setAdapter(dataAdapter);发送到spinner

您在此初始化Spinner spinner = (Spinner) view.findViewById(R.id.type_spinner);

spinner

由于android:id="@+id/type_spinner"为空,这意味着您使用了错误的ID。仔细检查您是否在fragment_search_pharmacy.xml

中实际使用<?php phpinfo(); ?>