Android - Как сохранить состояния флажков, и после закрытия приложения значения, сохраненные в флажках, сохраняются? - PullRequest
0 голосов
/ 22 января 2020

Я работал на платформе Android SDK, и немного неясно, как сохранить состояние приложения. Я создаю меню, в котором есть флажки. Я понимаю идею SharedPreferences, но не могу разобраться с реализацией SharedPreferences в CheckBoxes. Я хочу, чтобы эти флажки (несколько флажков) оставались отмеченными / не отмеченными, даже если пользователь перезапускает приложение.

public class MainActivity extends AppCompatActivity {

    protected WebView myWebView;
    protected TextView text_selection;
    protected TextView mOutputText;
    public static final  String TAG = "mytag";
    protected SharedPreferences sharedPreferences;
    protected SharedPreferences.Editor editor;
    private final String PREFERENCE_FILE_KEY = "myAppPreference";
    private Context context;
    protected CheckBox animal, fisheries, dairy;



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

        animal = (CheckBox)findViewById(R.id.animal);
        fisheries = (CheckBox)findViewById(R.id.fisheries);
        dairy = (CheckBox)findViewById(R.id.dairy);

        //sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

        sharedPreferences = getSharedPreferences(PREFERENCE_FILE_KEY, Context.MODE_PRIVATE);


        //Context context = getActivity();
        //SharedPreferences sharedPref = context.getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE);


        editor = sharedPreferences.edit();
        editor.putBoolean("animal", false);
        editor.putBoolean("fisheries", false);
        editor.putBoolean("dairy", false);

        //editor.putBoolean("checkbox", checkbox.isChecked()));
        editor.commit();


        this.myWebView = (WebView) findViewById(R.id.webview);
        this.text_selection = findViewById(R.id.text_selected);
        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);

        myWebView.setWebViewClient(new WebViewClient());
        myWebView.loadUrl("------");

        //mOutputText = (TextView) findViewById(R.id.tv_output);

        mOutputText = findViewById(R.id.textView);

        FirebaseInstanceId.getInstance().getInstanceId()
                .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
                    @Override
                    public void onComplete(@NonNull Task<InstanceIdResult> task) {

                        if(task.isSuccessful()){
                            String token=task.getResult().getToken();
                            Log.d(TAG, "onComplete: Token: "+token);
                            mOutputText.setText("Token has been generated");
                        }else{
                            mOutputText.setText("Token failed");
                        }

                    }
                });


    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main_menu, menu);

        if (sharedPreferences.getBoolean("animal", false)) {
            // findItem id function return the id of the menu
            menu.findItem(R.id.animal).setChecked(true);
        } else if (sharedPreferences.getBoolean("fisheries", false)) {
            menu.findItem(R.id.fisheries).setChecked(true);
        } else if (sharedPreferences.getBoolean("dairy", false)) {
            menu.findItem(R.id.dairy).setChecked(true);
        }

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item){

        editor = sharedPreferences.edit();
        switch (item.getItemId()) {
            case R.id.animal:
                if (item.isChecked()) {

                    item.setChecked(false);
                    editor.putBoolean("animal", false);
                } else {
                    item.setChecked(true);
                    editor.putBoolean("animal", true);
                }
                break;
            case R.id.fisheries:
                if (item.isChecked()) {
                    item.setChecked(false);

                    editor.putBoolean("fisheries", false);
                } else {
                    item.setChecked(true);
                    editor.putBoolean("fisheries", true);
                }
                break;
            case R.id.dairy:
                if (item.isChecked()) {
                    item.setChecked(false);
                    editor.putBoolean("dairy", false);
                } else {
                    item.setChecked(true);
                    editor.putBoolean("dairy", true);
                }
                break;

        }


        editor.commit();
        return super.onOptionsItemSelected(item);



    }

}

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Замените начальный материал в вашем onCreate следующим:

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

    sharedPreferences = getSharedPreferences(PREFERENCE_FILE_KEY, Context.MODE_PRIVATE);

    animal = (CheckBox)findViewById(R.id.animal);
    fisheries = (CheckBox)findViewById(R.id.fisheries);
    dairy = (CheckBox)findViewById(R.id.dairy);

    animal.setChecked(getCheckboxStatus("animal"));
    animal.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
          @Override
          public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
              saveCheckBoxValue("animal", isChecked);
          }
      }
    );

    fisheries.setChecked(getCheckboxStatus("fisheries"));
    fisheries.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
          @Override
          public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
              saveCheckBoxValue("fisheries", isChecked);
          }
      }
    );

    dairy.setChecked(getCheckboxStatus("dairy"));
    dairy.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
          @Override
          public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
              saveCheckBoxValue("dairy", isChecked);
          }
      }
    );

    // Your WebView and Firebase stuff
}

private void saveCheckBoxValue(String key, boolean isChecked) {
    editor = sharedPreferences.edit();
    editor.putBoolean(key, isChecked);
    editor.apply();
}

private boolean getCheckboxStatus(String key) {
    return sharedPreferences.getBoolean(key, false);
}

Измените функцию onCreateOptionsMenu на следующее:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main_menu, menu);
    menu.findItem(R.id.animal).setChecked(sharedPreferences.getBoolean("animal", false));
    menu.findItem(R.id.fisheries).setChecked(sharedPreferences.getBoolean("fisheries", false));
    menu.findItem(R.id.dairy).setChecked(sharedPreferences.getBoolean("dairy", false));
    return true;
}

Измените функцию onOptionsItemSelected на:

@Override
public boolean onOptionsItemSelected(MenuItem item){
    editor = sharedPreferences.edit();
    switch (item.getItemId()) {
        case R.id.animal:
            editor.putBoolean("animal", item.isChecked());
            break;
        case R.id.fisheries:
            editor.putBoolean("fisheries", item.isChecked());
            break;
        case R.id.dairy:
            editor.putBoolean("dairy", item.isChecked());
            break;
    }
    editor.apply();
    return super.onOptionsItemSelected(item);
}
0 голосов
/ 22 января 2020

Ниже пример;

   dairy.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
           {
               editor.putBoolean("dairy", isChecked);
               editor.commit();

            }
        });
...