2016-03-21 8 views
0

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(); 
    } 
} 

Antwort

0

Ihre Frage schlecht formuliert ist, aber ich nehme an (nach dem Code zu lesen), was Sie fragen, wie ein aktuell Toast angezeigt abzubrechen, wenn Sie eine neue Box aktivieren/deaktivieren und einen neuen Toast angezeigt werden sollen sofort in diesem Fall.

Das Problem ist, dass Sie die Toast, die Sie gerade gemacht haben, anstelle der Toast, die angezeigt wird, die Sie zuvor erstellt haben, stornieren.

Versuchen Sie, den Toast in einer Membervariablen zu speichern und stattdessen abzubrechen. Etwas wie:

private Toast mCurrerntToast = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    //... 
} 

public void onSharedPreferenceChanged(SharedPreferences settings, String key) { 
    if(key.equals("checkbox_key")){ 
     //If there is a previous toast displayed, cancel it 
     if(mCurrentToast != null){ 
      mCurrentToast.cancel(); 
     } 

     //Display a new, more current Toast message 
     mCurrentToast = Toast.makeText(this, "toast text", Toast.LENGTH_LONG); 
     mCurrentToast.show(); 
    } 
} 

Lassen Sie mich wissen, ob meine Vermutung, was Sie falsch waren gefragt war, und ich werde versuchen, mehr zu helfen, aber ich bin mir ziemlich sicher, das ist das Problem, das Sie versuchen zu lösen.

+0

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

+0

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

+0

Jetzt funktioniert es perfekt. Danke für Ihre Hilfe! – Robert