我有一个监听器,可以在用户点击微调器并选择项目时显示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);
我尝试了许多不同的东西,这就是为什么你看到所有那些奇怪的检查,我尝试在类中设置一个布尔变量,它也不起作用。
答案 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不会将其识别为更改。在这种情况下,您可以决定使用“提交”按钮来补充此项。或者,您可以在微调器下拉列表中将另一个伪条目添加到项目列表中,并以编程方式将其设置为默认选项。