Android 片段内的spinner.setOnItemClickListener()出错
我是Android开发新手,我遇到了一些无法解决的问题。 我试图在片段内部实现一个微调器,但现在它在Spinner.setOnItemClickListener方法中出现问题 它将显示一条错误消息: 塞托尼麦克利克监听器 Spinner中的android.widget.AdapterView.OnItemClickListener不能为空 适用于匿名 android.widget.AdapterView.OnItemSelectedListener 这是我的密码: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
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可能会被它弄糊涂。也谢谢您的输入。它帮助我改进了自己的答案-