为啥微调侦听器需要 onNothingSelected 方法?

Posted

技术标签:

【中文标题】为啥微调侦听器需要 onNothingSelected 方法?【英文标题】:Why is onNothingSelected method needed in spinner listener?为什么微调侦听器需要 onNothingSelected 方法? 【发布时间】:2013-05-02 14:41:09 【问题描述】:

母语为英语,所以我想对你们说对不起我糟糕的英语水平。

我从 5 周前开始研究 android。我试图实现一个微调器,我的导师问为什么需要 onNothingSelected 方法。我无话可说。

那么,为什么我需要那个方法?可以回复一下吗?

以下代码是我的微调器。它正确地完成了我的意图。

 public class SpinnerViewPractice extends Activity 
    private Spinner spinner;
    private String spinner_value = "";
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.spinnerviewpractice);

        spinner = (Spinner)findViewById(R.id.spinner1);

        String[] str = "","good", "dislike", "like", "hate", "moderate";
        spinner.setPrompt("Set Text");
        ArrayAdapter<String> list = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, str); 
        spinner.setAdapter(list);
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() 

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) 
                TextView tv = (TextView)arg1;
                spinner_value = tv.getText().toString();
                if(spinner_value.length() == 0)
                
                    spinner_value = "Nothing";                  
                
                Toast.makeText(SpinnerViewPractice.this, spinner_value, Toast.LENGTH_SHORT).show();
            

            @Override
            public void onNothingSelected(AdapterView<?> arg0) 
                Toast.makeText(SpinnerViewPractice.this, "NothingSelected", Toast.LENGTH_SHORT).show();
                       
        );
    

【问题讨论】:

onNothingSelected是在选择从此视图中消失时要调用的回调方法。 span> 据我所知,您需要它来表示敬酒吗?因此,如果他什么都不选择,您会通知用户。自己试试吧,注释掉这几行代码,看看你的应用是如何工作的。 【参考方案1】:

如文档所述:

从此视图中的选择消失时要调用的回调方法。例如,当触摸被激活或适配器变空时,选择可能会消失。

这意味着只要当前选定的项目从可用项目列表中删除,就会调用该方法。正如文档所描述的,这可能在不同的情况下发生,但通常如果修改了适配器以使当前选定的项目不再可用,则将调用该方法。

可以使用此方法,以便您可以设置在前一个项目不再可用的情况下将选择哪个项目。这不是让微调器自动选择列表中的下一项。

【讨论】:

如果唯一的参数是“AdapterView”,你怎么知道哪个项目没有被选中?你确定那是调用这个函数的时候吗? 微调器无法告诉您哪个项目被取消选择,因为它不再存在于它的适配器中。如果您想知道之前选择了哪个项目或索引,您需要自己存储该信息。【参考方案2】:

来自文档here。

onNothingSelected is a Callback method to be invoked when the selection disappears from this 看法。例如,当触摸被激活时,选择可能会消失 或者当适配器变空时。

我认为它几乎可以回答您的问题。因此,如果您的微调器因选择项目以外的其他原因而消失,则将调用 onNothingSelected。所以正如它的名字所说,需要找出什么时候没有选择

【讨论】:

文档似乎有误,在关闭时不会调用回调,请参阅此处***.com/a/3474463/819355 它根本就没有这种行为,尽管它应该这样做。

以上是关于为啥微调侦听器需要 onNothingSelected 方法?的主要内容,如果未能解决你的问题,请参考以下文章

spinner的理解

使用 Onitemselect 侦听器从微调器调用另一个活动。 [关闭]

在项目选择的侦听器上初始化(自定义微调器适配器)

在同一个片段中实现多个事件监听器 - Android

为啥我的搜索栏随着微调器移动?

为啥我在这里得到微调器的空引用错误? [复制]