2017-01-12 3 views
0

Ich verwende die sharedPreferences, um die Anzahl der Klicks aufzuzeichnen.Klicken Sie auf Zurück-Taste für ein Vielfaches von fünf und schnelle App

Wenn es auf ein Vielfaches von fünf gosed, wird es einen Dialog anzeigen und ich kann wählen, beenden oder nicht.

Ich versuche dies:

//global 
private int count=0; 
@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 

      SharedPreferences sharedPreferences = getSharedPreferences("count", MODE_PRIVATE); 
      SharedPreferences.Editor editor = sharedPreferences.edit(); 

      editor.putInt("count",count++); 
      int record = sharedPreferences.getInt("count", 0); 

      Toast.makeText(this, record + "test", Toast.LENGTH_SHORT).show(); 
      if (record % 5 == 0) { 
       quickDialog();//show dialog for quick 
      } 

     } 
     return super.onKeyDown(keyCode, event); 
    } 

1. Das Problem für die Aufzeichnung mein Toast ist, es zeigt immer 0.

2. und Dialog zeigt auch jeden Klick.

Warum?

+0

Du vergisst zu begehen. Aber warum müssen Sie nach Präferenz speichern. Verwenden Sie einfach die statische Variable. –

+0

'commit();' fügen Sie diese –

+0

danke euch beiden und @K hinzu. Sopheak erinnern Sie mich an den Weg, ya, warum ich Präferenz verwende .... –

Antwort

2

Weil Sie nicht bevorzugt Sparzustand sind,

editor.putInt("count",count++); 
// count is not saved yet  
int record = sharedPreferences.getInt("count", 0); 
// always get default value as zero 

so müssen Sie den Wert begehen mit editor.commit oder editor.apply

editor.putInt("count",count++); 
editor.commit(); 
//^^^ 
int record = sharedPreferences.getInt("count", 0); 
+0

danke @Pavneet Singh, ich vergaß den Einsatz, es funktioniert jetzt. –

+0

@ 徐博俊 Ich bin froh, dass ich helfen konnte, glücklich Codierung –

+1

gut durchdacht. –

1

Sie die Änderungen, so dass es in SharedPreference weiterhin besteht. Ansonsten wird es immer Standardwert zurück, die in diesem Fall 0.

editor.putInt("count",count++); 
editor.commit(); 
+0

danke Mann, ich habe es vergessen, lösen Sie mein Problem jetzt. –

+0

Sorry Mann, das System ließ mich nur eine wählen :( –

+0

Haha. Kein Problem. Die Antwort, die Sie akzeptiert haben, ist sicher mehr Erklärung als meine. Also, keine harten Gefühle. – fluffyBatman

0

verpflichten Ihre Änderung

private int count=0; 
    @Override 
     public boolean onKeyDown(int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_BACK) { 

       SharedPreferences sharedPreferences = getSharedPreferences("count", MODE_PRIVATE); 
       SharedPreferences.Editor editor = sharedPreferences.edit(); 

       editor.putInt("count",count++); 
       editor.commit(); 
       int record = sharedPreferences.getInt("count", 0); 

       Toast.makeText(this, record + "test", Toast.LENGTH_SHORT).show(); 
       if (record % 5 == 0) { 
        quickDialog();//show dialog for quick 
       } 

      } 
      return super.onKeyDown(keyCode, event); 
     } 
+0

danke, ich habe die Antwort. –

0

den Wert zu sparen, schaltet editor nicht commit() machen:

editor.commit(); 
+0

danke du, ich habe die antwort. –

+0

Zumindest upvote für bemühungen .. :) – W4R10CK

Verwandte Themen