2016-04-29 3 views
1

Hallo habe ich eine benutzerdefinierte Symbolleiste, um die Aktionsleiste mit einem Popup-Menü zu ersetzen, indem Sie die Hinweise vonAndroid Persistent überprüfbar Menü in benutzerdefinierten Widget nach einem Neustart Android

how to save menuitem visibility state through sharedpreferences?

und

Checkbox item state on menu android

und

http://developer.android.com/guide/topics/ui/menus.html#checkable

Am effektivsten ist es, den Status in gemeinsamen Voreinstellungen zu speichern, wie in den Stackoverflow-Antworten.

Meine Frage ist: Wie behalte ich die markierte Option auch nach dem Neustart meines Android?

Antwort

1

Eine Möglichkeit ist es, die .clear() Methode vor .commit()

anrufen Ein weiterer Grund ist die zuletzt gespeicherte Wert in gemeinsam genutzten Einstellungen abzurufen. Doch dieses zu tun hat, den Lebenszyklus einer Aktivität zu verstehen:

enter image description here

Nach dem Überprüfungsstatus von Benutzereinstellungen zu speichern, wie unten: Variablen deklarieren

/**Checkable Login Persist Shared Prefs Declarations Start*/ 
    private static final String PREFS_NAME = "IsCheckedState"; 
    String string; 
    SharedPreferences.Editor editor; 
    /**Checkable Login Persist Shared Prefs Declarations End*/ 

Nach dem Layout Einstellung Weisen Sie die Zeichenfolge (boolesche oder int in jedem beliebigen Fall) den gemeinsamen Einstellungen zu.

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     /** 
     Persistent Checkable Menu Start 
     **/ 
     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
     string = settings.getString("preference", string); 
     //Log.e("User Subscription", string); 
     /** 
     Persistent Checkable Menu End 
     **/} 
    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     super.onPrepareOptionsMenu(menu); 
     SharedPreferences settings = this.getSharedPreferences(PREFS_NAME, 0); 
     string = settings.getString("preference", string); 
     if (string.equals("Vibrate")) { 
      menu.findItem(R.id.start_action).setChecked(true); 
      Log.e("Vibrate", string); 
     } 
     else if (string.equals("Disable")){ 
      menu.findItem(R.id.my_cancel_action).setChecked(true); 
      Log.e("Disable", string); 
     } 
     return true; 
    } 
    // Menu options to set and cancel the alarm. 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     /*persistent checkable item logic start*/ 
     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
     editor = settings.edit(); 
     string = settings.getString("preference", string); 
     /*persistent checkable item logic end*/ 
     int id = item.getItemId(); 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     switch (id) { 

      // When the user clicks START ALARM, set the alarm. 
      case R.id.start_action: 
       alarm.setAlarm(); 
       item.setChecked(true); 
       string= "Vibrate"; 
       editor.putString("preference", string); 
       editor.commit(); 
       // invalidateOptionsMenu(); 
       return true; 
      // When the user clicks CANCEL ALARM, cancel the alarm. 
      case R.id.my_cancel_action: 
       alarm.cancelAlarm(this, 1); 
       item.setChecked(true); 
       string="Disable"; 
       editor.putString("preference", "Disable"); 
       editor.commit(); 
       //invalidateOptionsMenu(); 
       return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

Sie haben die zuvor gespeicherte Zeichenfolge aus dem gemeinsam genutzten Einstellungen abzurufen, wenn die App pausiert, gestoppt, wieder sichtbar (gestartet). So, zusätzlich zu den obigen Code, müssen Sie folgendes hinzuzufügen:

} 
    @Override 
    public void onResume() { 
     super.onResume(); 
     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
     string = settings.getString("preference", string); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
     string = settings.getString("preference", string); 
    } 

    @Override 
    protected void onRestart() { 
     super.onRestart(); 
     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
     string = settings.getString("preference", string); 
    } 


    @Override 
    protected void onPause() { 
     super.onPause(); 
     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
     string = settings.getString("preference", string); 
    } 
    @Override 
    protected void onStop() { 
     super.onStop(); 
     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
     string = settings.getString("preference", string); 
    } 

Das heißt, wenn Sie wirklich die geprüfte Option jederzeit gespeichert haben möchten. Bitte stimme wenn nötig ab.