java - Android - 如何保存复选框状态并在应用程序关闭后,保存在复选框中的值仍然存在?

标签 java android android-studio android-checkbox

我一直在研究Android SDK平台,但不太清楚如何保存应用程序的状态。我正在创建一个带有复选框的菜单。我确实了解 SharedPreferences 的想法,但我无法理解在 CheckBoxes 中实现 SharedPreferences 的情况。 我希望这些复选框(多个复选框)保持选中/未选中状态,即使用户重新启动应用程序也是如此。

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



    }

}

最佳答案

下面的例子;

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

            }
        });

关于java - Android - 如何保存复选框状态并在应用程序关闭后,保存在复选框中的值仍然存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59857062/

相关文章:

缺少 Android Studio SDK

Android 无法显示 ProgressDialog

java - 编写 CardTrick 程序,我无法确定用户的卡是否是从一副牌中随机抽取的七张卡中的一张

java - 多个类所需的依赖关系的设计模式(java)

java - Sonar : Array should contain trailing comma

javascript - 适用于移动浏览器的 WEBRTC 屏幕捕获 API

java - Gradle:在自定义任务类中使用其他(非官方)任务?

android - 如何在Android中使用Parse实现RecyclerView的无限滚动

java - 当对象键为数字时如何创建 Java getter 和 setter

java - set_timerslack_ns写入失败: Operation not permitted. Android MapFragment