2017-08-16 12 views
-1

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

public class MainActivity extends AppCompatActivity { 
    static Switch swch; 
    static TextView onOffBar; 
    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

これがあなたの意図ではない場合は、私はお詫び申し上げます。しかし、基本的に正しい方向に進み、保存して確認するブール値ごとに異なるキーを入力するだけで済みます。また、設定にもっと説明的なキーを使用するのがベストプラクティスです。何かに適用できる「チェックボックス」のようなものを使用する代わりに、ディスクリプタを使用してみてください。

 @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("red", item.isChecked()); 
       editor.commit(); 
       return true; 
       Case R.id.blue: 
       item.setChecked(!item.isChecked()); 
       Blue1 = item.isChecked(); 
       editor.putBoolean("blue", Blue1); 
       editor.commit(); 
       return true; 
      case R.id.green: 
       item.setChecked(!item.isChecked()); 
       Green1=item.isChecked(); 
       editor.putBoolean("green", Green1); 
       editor.commit(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 
+0

@ Devsil..私はこれを試しましたが、アプリケーションが終了すると、チェックボックスの状態は保存されません。私は何を変えるべきですか? – Thomas

+0

それはどういう場合か分からないかもしれませんが、エディタのcommit()をapply()に置き換えてみてください。 – Devsil

-2

モデルオブジェクトを格納するためにGsonを使用できます。

public class CheckboxData { 
    boolean personalize_permissions; 
    boolean add_tanslucent_layer; 
    boolean integrate_flowInfo; 
} 

CheckboxDataのオブジェクトを作成し、チェックボックスの選択に応じて、それを移入build.gradleに

compile 'com.google.code.gson:gson:2.7' 

を次の行を追加します。

CheckboxData data = new CheckBoxData(); 
data.setPersonalize_permissions(true); 
data.setIntegrate_flowInfo(true); 

Gson gson = new Gson(); 
String json = gson.toJson(data); 
prefsEditor.putString("CheckBoxPrefs", json); 

prefData値あたりとして選択したチェックボックスを設定し

Gson gson = new Gson(); 
String json = mPrefs.getString("CheckBoxPrefs", ""); 
CheckboxData prefData = gson.fromJson(json, CheckboxData.class); 

を取り出します。

+0

これは技術的には正しいですが、やりたいことが完全に過剰であるかもしれません。 – Devsil

関連する問題