为什么onNothingSelected方法没有被调用?

6

在 Activity 启动时选择 Spinner 项目

  spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {

                  Toast.makeText(parent.getContext(), "The country is " +
                     position , Toast.LENGTH_LONG).show();

            }
            public void onNothingSelected(AdapterView<?> parent) {
                return;

            }
        });

当活动开始时,onItemSelected方法会被调用。

我希望当活动开始时不显示任何toast消息。只有在用户选择一个项目时才显示消息。


也许你应该从未选择的情况中移除返回命令! - Andro Selva
首先我尝试了没有 return 的方式,但不起作用,所以我加了 return;,但两种方式都不起作用。 - Sunny
放置烤面包在(如果arg2!=0)内。 - Pratik Bhat
1
这个问题似乎完全与标题相反。标题不应该是“为什么在启动时调用onItemSelected”吗? - David Doria
听起来像是一个 XY 问题。问题应该是“为什么在没有选择任何内容的情况下调用 onItemSelected”。 - Don Larynx
2个回答

5

你需要使用标记来维护状态。当你的Activity启动时,Spinner已经选择了它的第一个项目,因此它的onItemSelected在Activity启动时就会被调用。

你可以通过以下方式管理它,使用两个int变量。

int first_spinner = 0, first_spinner_counter = 0;

现在,当您初始化 spinner 时,请设置 first_spinner = 1; 然后添加监听器。
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {

                  if (first_spinner_counter < first_spinner) {
                          first_spinner_counter++;
                    } 
                  else 
                  {
                     Toast.makeText(parent.getContext(), "The country is " +
                     position , Toast.LENGTH_LONG).show();
                  }
            }
            public void onNothingSelected(AdapterView<?> parent) {
                return;
            }
        });

0

只需检查位置。当Spinner触发时,默认选择第一个位置

if(position==0)
//donothing
else
{
// do your part here
}

12
好的!如果用户想选择下拉列表中的第一个项目,他就会受到诅咒:D 我喜欢你想要看着世界燃烧的方式。 - VipulKumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接