Fragment 中的 spinner.setOnItemClickListener() 错误

Error with spinner.setOnItemClickListener() inside Fragment

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

显示错误信息:

"setOnItemClickListener (android.widget.AdapterView.OnItemClickListener) in Spinner cannot be applied to (anonymous 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;
  }
}

使用getActivity()代替getBaseContext()

你想要 getBaseContext() 有什么理由吗?您应该能够将 getActivity() 作为 createFromResource()

的第一个参数传递

setOnItemClickListener 不适用于微调器,如 Spinner SetOnItemClickListener:

所述

A spinner does not support item click events. Calling this method will raise an exception.

Instead use 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) {

  }
});

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