2016-04-29 16 views
1

こんにちは後、私はAndroidの永続的なチェック可能なメニューは、再起動のアンドロイド

how to save menuitem visibility state through sharedpreferences?

Checkbox item state on menu android

からヒントを使用して、ポップアップメニューでアクションバーを置き換えるためにカスタムツールバーをデザイン

および

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

最も効果的な方法は、stackoverflowの回答のように、共有の設定で状態を保存することです。

私のアンドロイドを再起動しても、チェックされたオプションを選択したままにするにはどうすればよいですか?

答えて

1

一つの方法は、.commit()

もう一つは、共有設定の最後の格納された値を取得することである前に.clear()メソッドを呼び出すことです。レイアウトを設定した後、変数

/**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*/ 

を宣言 :以下のように、ユーザー設定のチェック状態を格納した後

enter image description here

:しかし、これを行うには、アクティビティのライフサイクルを理解する必要があります変数を共有設定に割り当てる(場合によってはブール値またはintを変数に割り当てる)。あなたはアプリが一時停止されたときに、共有環境設定から、以前に格納されている文字列を取得する必要が

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

は、停止し、(開始)見え再開しました。だから、上記のコードに加えて、次のような追加する必要があります:あなたは本当にすべての回で保存された確認オプションを持つようにしたい場合は、ある

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

。もし役に立つのならば、投票してください。

関連する問題