2014-12-02 63 views
0

我有一个侦听器来显示Toast消息,当用户单击微调器并选择一个项目时。如何禁用setOnItemSelectedListener(监听器)Toast消息

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

我已经尝试setOnItemSelectedListener(null),然后以编程方式设置微调器的值,然后setOnItemSelectedListener(侦听器)之后 但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); 

我尝试了很多不同的东西,这就是为什么你看到所有这些怪异的,如果检查,我尝试设置一个布尔在课堂上也是可变的,它也不起作用。

+0

你可以把你的代码放在这里吗? – 2014-12-02 00:27:38

+0

是的,我现在要做的 – 2014-12-02 00:31:19

+1

对不起,但是这段代码很糟糕。你为什么不使用一些对象sarray? fx数组class'w2t {string weather;字符串temp_str; }或者至少你为什么不使用某种字典/地图类,为什么你没有以正常的方式在onitemclick中获取选定的项目:'T item =(T)parent.getItemAtPosition(position);'where T是一个适配器的项目类型... – Selvin 2014-12-02 00:44:48

回答

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; 
     } 
} 
+0

我已经挣扎了很久。谢谢你是男人,早退就是天才。 – 2014-12-02 01:17:16

+0

我也用这个改变删除了很多代码,所有的if检查toast都是null,我不必担心setOnItemSelectedListener(null)的设置。 – 2014-12-02 01:27:38

0

您可以在以编程方式设置微调器的值以取消烤面包的时刻调用cancel()。

+0

我尝试过.cancel()设置Visibility(View.INVISIBLE)并设置Toast对象为null,但似乎没有任何工作,如果toast.show()被称为它将始终显示,并且在此之后,cancel()似乎没有效果。 – 2014-12-02 00:30:41

0

你可以做到这一点

吐司面包= Toast.makeText(getApplicationContext(), “消息”,Toast.LENGTH_SHORT);

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

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

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不会将其识别为更改。在这种情况下,你可以决定有一个提交按钮来补充这一点。或者,您可以在微调器下拉列表中将其他虚假条目添加到项目列表中,并以编程方式将其设置为默认选项。