Android 片段内的spinner.setOnItemClickListener()出错

Android 片段内的spinner.setOnItemClickListener()出错,android,android-fragments,spinner,Android,Android Fragments,Spinner,我是Android开发新手,我遇到了一些无法解决的问题。 我试图在片段内部实现一个微调器,但现在它在Spinner.setOnItemClickListener方法中出现问题 它将显示一条错误消息: 塞托尼麦克利克监听器 Spinner中的android.widget.AdapterView.OnItemClickListener不能为空 适用于匿名 android.widget.AdapterView.OnItemSelectedListener 这是我的密码: public class Ch

我是Android开发新手,我遇到了一些无法解决的问题。 我试图在片段内部实现一个微调器,但现在它在Spinner.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;
  }
}

使用getActivity而不是getBaseContext

使用getActivity而不是getBaseContext

需要getBaseContext的原因是什么?您应该能够将getActivity作为createFromResource的第一个参数传递给用户,这是您想要getBaseContext的原因吗?您应该能够将getActivity作为createFromResource的第一个参数传递,setOnItemClickListener将不会与微调器一起工作,如在以下位置所述:

微调器不支持项目单击事件。调用此方法将 提出一个例外

改用 setOnItemSelectedListenerAdapterView.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将不会与微调器一起工作,如在以下位置所述:

微调器不支持项目单击事件。调用此方法将 提出一个例外

改用 setOnItemSelectedListenerAdapterView.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的参数。但是,您正在给它一个MSelectedListener。由于Spinner不支持OnItemClickListener,您可能想调用onItemSelectedListener,它将onItemSelectedListener作为其参数。

错误消息告诉您,setOnItemClickListener将使用OnItemClickListener类型的参数。但是,您正在给它一个MSelectedListener。由于Spinner不支持OnItemClickListener,您可能想调用onItemSelectedListener,它将onItemSelectedListener作为参数。

标题和问题不匹配。你到底在问什么错误?@Code学徒标题已编辑,谢谢提醒!是关于spinner.SetOnItemListener标题和问题不匹配。你到底在问什么错误?@Code学徒标题已编辑,谢谢提醒!是关于spinner.SetOnItemListener我使用getBaseContext的原因,因为这是我的一个解决方案,我在其他帖子中提到了一个解决方案,但是我现在找不到帖子。但是现在我使用getActivity而不是我的原始答案,它也可以工作!感谢我使用getBaseContext的原因,因为这是我的一个解决方案,我在其他帖子中提到了一个解决方案,但我现在找不到该帖子。但是现在我使用getActivity代替了我原来的答案,它也能工作!谢谢你的解决方案对我有用,谢谢你帮助我=@CZenLau请接受最有帮助的答案。你也可以投票给任何有用的答案。你的解决方案对我有用,谢谢你帮我解决=@CZenLau请接受最有帮助的答案。你也可以投票给任何有用的答案。注意!非常感谢。注意!非常感谢。setOnItemClickListener不能与微调器一起使用。事实并非如此。微调器有此方法,否则OP将收到完全不同的错误消息。我在上读过,它说微调器不支持项目单击事件。调用此方法将引发异常。。还是我遗漏了什么?你是对的。我错过了。我仍然认为更大的问题是OP不理解错误消息暗示的解决方案,因为参数是错误的类型。我完全同意你的观点。如果没有您的明确解释,OP可能会被它弄糊涂。也谢谢您的输入。它帮助我改进了自己的答案-setOnItemClickListener不能与微调器一起使用。事实并非如此。微调器有此方法,否则OP将收到完全不同的错误消息。我在上读过,它说微调器不支持项目单击事件。调用此方法将引发异常。。还是我遗漏了什么?你是对的。我错过了。我仍然认为更大的问题是OP不理解错误消息暗示的解决方案,因为参数是错误的类型。我完全同意你的观点。如果没有您的明确解释,OP可能会被它弄糊涂。也谢谢您的输入。它帮助我改进了自己的答案-