Ich sah ähnliche Beiträge wie diese - Disable the Asynchronous display of a Toast [duplicate] und ich versuchte cancel() -Methode von dort, aber sie lösen nicht mein Problem. Vielleicht liegt es daran, dass etwas mit der Präferenzaktivität zu tun hat.Notwendigkeit Toast nach dem Klick anzuzeigen
Bitte helfen Sie mir meinen Code zu verbessern, so dass der Toast direkt nach dem Klicken angezeigt wird.
@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();
}
}
Sie verstehen mich richtig. Als über Ihre Lösung. AndroidStudio zeigt einen Kommentar, dass die Variable "mCurrentToast" möglicherweise nicht initialisiert wurde. Ich habe diese Zeile verschoben 'mCurrentToast = Toast.makeText (this," Toast Text ", Toast.LENGTH_LONG);' vor allen if-Anweisungen wie in meinem vorherigen Code, aber es stürzt die App (NullExeption). – Robert
Sie können diese Zeile nicht vor der Zeile ".cancel()" verschieben, sonst stornieren Sie Ihren neuen Toast anstelle des alten. Setzen Sie mCurrentToast beim Erstellen einfach auf null. Ich werde mein Codebeispiel aktualisieren, um dies zu berücksichtigen. – ajpolt
Jetzt funktioniert es perfekt. Danke für Ihre Hilfe! – Robert