0
我看到这样的相关职位 - Disable the Asynchronous display of a Toast [duplicate]和我尝试从那里取消()方法,但他们不能解决我的问题。也许这是因为与偏好活动有关的一些差异。需要显示吐司后点击
请帮助我改进我的代码,使Toast在点击后显示。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_screen);
Context context = getApplicationContext();
settings = PreferenceManager.getDefaultSharedPreferences(context);
settings.registerOnSharedPreferenceChangeListener(this);
}
public void onSharedPreferenceChanged(SharedPreferences settings, String key) {
Toast theToast;
theToast = Toast.makeText(this, "toast text", Toast.LENGTH_LONG);
if(key.equals("checkbox_key")){
theToast.show();
}
if (key.equals("checkbox_key")&& theToast != null){
theToast.cancel();
}
}
你明白我的正确。 至于你的解决方案。 AndroidStudio显示注释,变量“mCurrentToast”可能尚未初始化。我在这之前移动了这行 'mCurrentToast = Toast.makeText(this,“toast text”,Toast.LENGTH_LONG);' 之前的所有if语句像我以前的代码,但它会崩溃应用程序(NullExeption)。 – Robert
您不能在“.cancel()”行之前移动该行,否则您将取消新的Toast而不是旧的Toast。创建它时,请将mCurrentToast设置为null。我会更新我的代码示例以反映这一点。 – ajpolt
现在它完美地工作。感谢您的帮助! – Robert