如何禁用setOnItemSelectedListener(listener)Toast消息

时间:2014-12-02 00:24:55

标签: android message toast

我有一个监听器,可以在用户点击微调器并选择项目时显示Toast消息。

但是当我以编程方式设置微调器的值时,我想禁用Toast消息。 我该怎么做。

我在编程设置spinner的值然后setOnItemSelectedListener(listener)之后尝试了setOnItemSelectedListener(null) 但无论我做什么,Toast消息仍然显示。

提前致谢。

这一切都在onCreate btw里面完成。我只想在onCreate为微调器设置默认值时禁用Toast消息。

这是我的倾听者

private OnItemSelectedListener listener = new OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View view,
            int position, long id) {
        String item = (String) parent.getItemAtPosition(position);
        toast = Toast.makeText(getBaseContext(),
                Weather.TEMP_DESCRIPTION.get(item), Toast.LENGTH_SHORT);
        if (mTemp.getOnItemSelectedListener() != null) {
            toast.show();
        }

    };

    public void onNothingSelected(AdapterView<?> parent) {

    }
};

这就是我在onCreate()

中所拥有的
Bundle extras = getIntent().getExtras();
        if (extras != null) {

            mTemp.setOnItemSelectedListener(null);

            String weather = extras.getString("weather");
            String tempStr = extras.getString("temp_str");
            if (weather.equals(Weather.UNAVAILABLE)) {
                mWeather.setSelection(adapter.getPosition(Weather.ANY_WEATHER));
                if (toast != null) {
                    toast.cancel();
                    toast.getView().setVisibility(View.INVISIBLE);
                    toast = null;
                }
            } else {
                mWeather.setSelection(adapter.getPosition(weather));
                mTemp.setSelection(tempAdapter.getPosition(tempStr));
                if (toast != null) {
                    toast.cancel();
                    toast.getView().setVisibility(View.INVISIBLE);
                    toast = null;
                }
            }

        }
mTemp.setOnItemSelectedListener(listener);

我尝试了许多不同的东西,这就是为什么你看到所有那些奇怪的检查,我尝试在类中设置一个布尔变量,它也不起作用。

4 个答案:

答案 0 :(得分:1)

全局布尔值:

public boolean userSet = true;

在创建时:

Bundle extras = getIntent().getExtras();
    if (extras != null) {
        userSet = false;
        mTemp.setOnItemSelectedListener(null);

        String weather = extras.getString("weather");
        String tempStr = extras.getString("temp_str");
        if (weather.equals(Weather.UNAVAILABLE)) {
            mWeather.setSelection(adapter.getPosition(Weather.ANY_WEATHER));
            if (toast != null) {
                toast.cancel();
                toast.getView().setVisibility(View.INVISIBLE);
                toast = null;
            }
        } else {
            mWeather.setSelection(adapter.getPosition(weather));
            mTemp.setSelection(tempAdapter.getPosition(tempStr));
            if (toast != null) {
                toast.cancel();
                toast.getView().setVisibility(View.INVISIBLE);
                toast = null;
            }
        }

        mTemp.setOnItemSelectedListener(listener);
    }

<强>监听器:

private OnItemSelectedListener listener = new OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View view,
            int position, long id) {

       if (!userSet) {
           userSet = true;
           return;
       }
 }

答案 1 :(得分:0)

您可以在以编程方式设置微调器的值以取消吐司时调用cancel()。

答案 2 :(得分:0)

你可以这样做

Toast toast = Toast.makeText(getApplicationContext(),&#34; message&#34;,Toast.LENGTH_SHORT);

当你需要显示吐司时,你使用toast.show();

当你需要隐藏你使用时 toast.cancel();或者解雇或隐藏不记得......

答案 3 :(得分:0)

Spinners很棘手。即使你以编程方式设置微调器的值,无论如何都会调用onItemSelected。所以在onCreate中,只需根据需要设置值,然后调用SetOnItemSelected。

在onItemSelected中,您必须单独处理此案例。您可以使用标志,如果设置了标志,则不执行任何操作,否则显示吐司。也可以使用计数器。启动计数器= 0;然后使用以下代码

  {
  if (spinner_count == 0)
  {
     spinner_count++;
  }
  else
  {
     //Display Toast message or whatever you want to do. 
  }

但这种方法面临挑战。如果用户以编程方式选择您设置的内容,则onItemSelected将不会被调用,因为android不会将其识别为更改。在这种情况下,您可以决定使用“提交”按钮来补充此项。或者,您可以在微调器下拉列表中将另一个伪条目添加到项目列表中,并以编程方式将其设置为默认选项。