2017-08-16 11 views
0

私はまだこれに固執しているので、私はこの質問を再掲載しています。共有設定項目ストア

私は簡単なアンドロイドアプリケーションを作成しています。私はそれに3つのチェックボックスを持つメニュー項目があります。私のアプリが起動するとすぐに、ユーザーは与えられたチェックボックスから1つ以上を選択することができます。しかし、私はさらなる参照のためにユーザーの選択を保存したいと思います。共有設定を使用して1つのチェックボックスでこれを実現しましたが、1つ以上のチェックボックスが選択されている場合はこれを達成できません。ここに私のコードは次のとおりです。

public class MainActivity extends AppCompatActivity { 
    static Switch swch; 
    public static boolean red = false; 
    public static boolean blue = false; 
    public static boolean green = false; 

    private static final String TAG = "MainActivity"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main);  
} 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main_menu, menu); 
     SharedPreferences settings = getSharedPreferences("settings", 0); 
     boolean isChecked = settings.getBoolean("checkbox", false); 

     MenuItem item = menu.findItem(R.id.red); 
//  MenuItem item1 = menu.findItem(R.id.blue); 
//  MenuItem item2 = menu.findItem(R.id.green); 
     item.setChecked(isChecked); 
//  item1.setChecked(isChecked); 
//  item2.setChecked(isChecked); 
     //return super.onCreateOptionsMenu(menu); 
     return true; 
    } 


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     SharedPreferences settings = getSharedPreferences("settings", 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     switch (item.getItemId()) { 
      case R.id.red: 
       item.setChecked(!item.isChecked()); 

       editor.putBoolean("checkbox", item.isChecked()); 
       editor.commit(); 
       return true; 
      case R.id.blue: 
       item.setChecked(!item.isChecked()); 

       editor.putBoolean("checkbox", item.isChecked()); 
       editor.commit(); 
       return true; 
      case R.id.green: 
       item.setChecked(!item.isChecked()); 

       editor.putBoolean("checkbox", item.isChecked()); 
       editor.commit(); 
       return true; 

      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

はどのように共有設定を使用して、すべてのスイッチケースのオプションのためにこれを達成できますか?

ありがとうございました。

+0

チェックボックス以外のキーを使用して他のアイテムに保存する必要があります。どのくらい正確にデータを保存したいのか、それをどのように取得して使用したいのですか? –

+0

@ Kapil Gユーザーがチェックボックスを選択した場合でも、そのアプリケーションが強制終了された後でもそのアプリケーションを再開しても、その選択は維持されます。上記のコードは、1番目のチェックボックスでも実行できます。しかし、ユーザーが1つ以上のチェックボックスを選択してもデータを保持したい場合 – Thomas

+0

各チェックボックスの値を別のキーに保存し、アクティビティを開くとすべてのキーを取得し、各キーに格納されている値に基づいてチェックボックスを設定します –

答えて

1

以下のように、onCreateOptionsMenuonOptionsItemSelectedの2つの方法を更新してください。

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

     getMenuInflater().inflate(R.menu.main_menu, menu); 
     SharedPreferences settings = getSharedPreferences("settings", 0); 
     boolean red = settings.getBoolean("red", false); 
     boolean blue = settings.getBoolean("blue", false); 
     boolean green = settings.getBoolean("green", false); 

     MenuItem item = menu.findItem(R.id.color1); 
     MenuItem item1 = menu.findItem(R.id.color2); 
     MenuItem item2 = menu.findItem(R.id.color3); 
     item.setChecked(red); 
     item1.setChecked(blue); 
     item2.setChecked(green); 
     //return super.onCreateOptionsMenu(menu); 
     return true; 
    } 


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     SharedPreferences settings = getSharedPreferences("settings", 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     switch (item.getItemId()) { 
      case R.id.color1: 
       item.setChecked(!item.isChecked()); 


       editor.putBoolean("1", item.isChecked()); 
       editor.commit(); 
       return true; 
      case R.id.color2: 
       item.setChecked(!item.isChecked()); 

       editor.putBoolean("2", item.isChecked()); 
       editor.commit(); 
       return true; 
      case R.id.color3: 
       item.setChecked(!item.isChecked()); 

       editor.putBoolean("3", item.isChecked()); 
       editor.commit(); 
       return true; 
      case R.id.item_accessibility_services: 
       startActivity(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS)); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 
+0

@トーマスこれを答えとして選択解除する理由は何ですか? –

+0

申し訳ありませんが、私は答えとしてこれを間違って選択しました。 – Thomas

関連する問題