2017-01-01 3 views
0

Ich verstehe, dass die beste Methode zum Speichern von Werten die Verwendung von SharedPreferences ist, z.Verwenden von SharedPreference zum Speichern von Benutzerdetails

Aber was, wenn ich möchte, dass mein Programm sich daran erinnert, dass eine Taste deaktiviert oder aktiviert wird, nachdem der Benutzer das Programm schließt und öffnet? Ich habe einen RegisterOnChangePreferanceListener versucht, aber ich habe kein Glück z.

SharedPreferences Preferences= PreferenceManager.getDefaultSharedPreferences(this); 
     SharedPreferences.OnSharedPreferenceChangeListener Example = 
       new SharedPreferences.OnSharedPreferenceChangeListener() { 
        public void onSharedPreferenceChanged(SharedPreferences preferance, String key) { 

         Name = name;//only an example not the main focus 
         Age = age; 
         Score = score; 
         enableBTN = false; //disables button 
         Name.setEnabled(false); //disables the edit text from further editing 
} 
       }; 
     Preferences.registerOnSharedPreferenceChangeListener(Example); 

Gibt es eine Möglichkeit, dies zu tun, scheinen beide Methoden nicht für mich arbeiten.

+0

https://developer.android.com/guide/topics/data/data-storage.html oder https://developer.android.com/guide/topics /resources/runtime-changes.html – Blundell

Antwort

1

Sie müssen es in den OnClickListener der Schaltfläche speichern. Auf diese Weise wird bei jedem Klick auf die Schaltfläche garantiert, dass der Status der Schaltfläche gespeichert wird. button ist eine Referenz auf ein Objekt Button Ansicht

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle bundle) { 
     Button button = (Button)findViewById("this_button_view_id"); 
     EditText editText = (EditText)findViewById("this_edit_text_id"); 
     SharedPreferences Savesettings = getSharedPreferences("settingFile", MODE_PRIVATE); 

     // If the Savesettings shared preferences above contains the "isButtonDisabled" key 
     // It means the user clicked and disabled the button before 
     // So we use that state instead 
     // If it does does not contain that key 
     // We set it to true so that the button is not disabled 
     // Same for the edit text 
     button.setEnabled(Savesettings.contains("isButtonDisabled") ? Savesettings.getBoolean("isButtonDisabled") : true); 
     editText.setEnabled(Savesettings.contains("isEditTextDisabled") ? Savesettings.getBoolean("isEditTextDisabled") : true); 

     button.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // disable the edit text 
       editText.setEnabled(false); 

       // disable the button 
       button.setEnabled(false); 

       SharedPreferences.Editor example = Savesettings.edit(); 

       // Save the button state to the shared preferences retrieved above 
       example.putBoolean("isButtonDisabled", true); 

       // Save the edit text state to the shared preferences retrieved above 
       example.putBoolean("isEditTextDisabled", true); 
       example.apply(); 

      } 
     }); 
    } 
} 
+0

Aber was ist, wenn ich eine andere Hintergrundfarbe einstellen oder Edittext deaktivieren möchte? –

+0

Wenn auf die Schaltfläche geklickt wird? Ich meine, Sie können jede Art von Logiken, die Sie wollen, innerhalb des 'OnClickListener' machen. – Dummy

+0

Eine Aktivität innerhalb eines Button-Klicks neu zu erstellen macht keinen Sinn, oder? Warum sollten Sie das trotzdem machen? Sie könnten die Aktivität schließen oder eine neue starten, das macht mehr Sinn. Das Speichern der gemeinsamen Präferenz wird zwischen 'Savesettings.edit();' und 'example.apply();' keinen anderen Code innerhalb dieses – Dummy

Verwandte Themen