Fragment中的spinner.setOnItemClickListener()出错

时间:2016-09-24 04:37:33

标签: android android-fragments spinner

我是Android开发的新手,我遇到了一些无法解决的问题。 我尝试在 Fragment 中实现 Spinner ,现在它遇到了 spinner.setOnItemClickListener()方法的问题,

显示错误消息:

  

“setOnItemClickListener   Spinner中的(android.widget.AdapterView.OnItemClickListener)不能   适用于(匿名   android.widget.AdapterView.OnItemSelectedListener)

这是我的代码:

public class CheckAvailabilityFragment extends Fragment {
  Spinner spinner;
  ArrayAdapter<CharSequence> adapter;

  @Override
  public View onCreateView(LayoutInflater inflater, final ViewGroup container,
                         Bundle savedInstanceState) {
    final View rootView = inflater.inflate(R.layout.fragment_check_availability, container,false);
    spinner = (Spinner)getView().findViewById(R.id.spinner);
    adapter = ArrayAdapter.createFromResource(getActivity().getBaseContext(),R.array.venue,android.R.layout.simple_list_item_1);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);

    spinner.setOnItemClickListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
          Toast.makeText(getBaseContext(), parent.getItemAtPosition(position) + " selected", Toast.LENGTH_SHORT).show();
        }

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

        }
    });
    return rootView;
  }
}

4 个答案:

答案 0 :(得分:2)

错误消息告诉您setOnItemClickListener()采用OnItemClickListener类型的参数。但是,你给它一个OnItemSelectedListener。由于Spinner不支持OnItemClickListener,您可能需要调用以onItemSelectedListener()为参数的OnItemSelectedListener

答案 1 :(得分:1)

setOnItemClickListener 不会像我在Spinner SetOnItemClickListener所说的那样使用微调器:

  

微调器不支持项目点击事件。调用这个方法会   提出异常。

     

改为使用   setOnItemSelectedListener(AdapterView.OnItemSelectedListener)。

尝试使用以下内容:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
  @Override
  public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    Toast.makeText(getBaseContext(), parent.getItemAtPosition(position) + " selected", Toast.LENGTH_SHORT).show();
  }

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

  }
});

答案 2 :(得分:0)

使用getActivity()代替getBaseContext()

答案 3 :(得分:0)

您有理由getBaseContext()吗?您应该只能将getActivity()作为createFromResource()

的第一个参数传递