【问题标题】:How to make checkbox determine if activity should be displayed or not如何使复选框确定是否应显示活动
【发布时间】:2019-01-21 06:59:27
【问题描述】:

简单解释:

放置在一个活动(演练)中的复选框应确定该活动是否在第二次应用启动时再次显示。选中复选框 - 将不再显示活动,应用程序启动应从 MainActivity 开始。这样做的简单技巧是什么?如果使用共享首选项,我是否需要将复选框状态从一个活动传递到另一个活动?我不想使用任何警报框或对话框。

这是我在 Preshow.class(活动)中的 sharedpreferences 尝试:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        final SharedPreferences.Editor editor = preferences.edit();
        if(preferences.contains("checked") && preferences.getBoolean("checked", false) == true){
            radioButton.setChecked(true);
        }else{
            radioButton.setChecked(false);
        }
radioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(radioButton.isChecked()){
                editor.putBoolean("isShowOnboarding", true);
                editor.apply();
            }else {
                editor.putBoolean("isShowOnboarding", false);
                editor.apply();
            }}}

MainActivity 中的代码:

Boolean isShowOnboarding = getSharedPreferences("PREFERENCE", MODE_PRIVATE)
            .getBoolean("isShowOnboarding", true);

    if (isShowOnboarding) {
        //show walkthrough activity
        startActivity(new Intent(MainActivity.this, Preshow.class));
        finish();
    }

【问题讨论】:

  • 似乎有什么问题?您应该使用 SharedPreferences 来存储复选框的值,并根据该意图转到您想要的任何活动。
  • onCreate 中的setContentView() 方法之前检查共享首选项值。如果选中下一个活动的使用意图,则继续。
  • @VivekMishra 但我如何检查 Mainactivity 类中的共享首选项。我在另一个活动中定义了复选框侦听器并附加了 sharedpreferences - preshow 类。
  • 可以从任何活动中访问共享首选项。

标签: android checkbox sharedpreferences


【解决方案1】:

首先,让我们重写你的预演:

    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    final SharedPreferences.Editor editor = preferences.edit();
    checkBox.setChecked(preferences.getBoolean("isShowOnboarding", false));

    checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            editor.putBoolean("isShowOnboarding", checkBox.isChecked());
        }
     }

看到了吗?干净多了。请注意,我将单选按钮更改为复选框,始终使用复选框进行二元(是/否)决策。此外,我使用相同的 SharedPreferences 变量(“isShowOnboarding”)进行检查和存储。

现在,如果你想跳过这个 Preshow 类并直接进入 MainActivity,你需要创建另一个类,它检索“isShowOnboarding”并检查它是否为真,然后决定用户是去 Preshow 还是 Main .当我们需要在实际启动应用程序之前加载用户数据时,我们通常会使用“SplashScreen”活动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多