选中CheckBox时退出显示活动

时间:2016-07-12 19:40:32

标签: java android checkbox

我有一个带有&#34的DialogActivity;不再显示"复选框。

我需要它做的就像CheckBox所说的那样。选中CheckBox时,无论应用程序是重新启动还是被杀死,都不再向用户显示活动。

public class PopUpInfoActivity extends Activity {
static final String PREFS = "preference_file";

@Override
public void onCreate(Bundle state) {
    setContentView(R.layout.popupinfo_layout);

    CheckBox chk = (CheckBox) findViewById(R.id.dontshow_checkbox);
    chk.setChecked(PreferenceManager.getDefaultSharedPreferences(this).getBoolean("value", false));

    chk.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            //store isChecked to Preferences
            SharedPreferences settings = getSharedPreferences(PREFS, 0);
            SharedPreferences.Editor editor = settings.edit();
            editor.putBoolean("isChecked", false);

            PreferenceManager.getDefaultSharedPreferences(PopUpInfoActivity.this).edit().putBoolean("value", isChecked).apply();
        }
    });

    Intent intent = new Intent(PopUpInfoActivity.this, ChordsListActivity.class);

    if (!chk.isChecked()) {
        // run activity
        super.onCreate(state);
    } else {
        startActivity(intent);
    }
}
}

如果我这样做,应用程序崩溃。

如果我将else替换为:

else {
    onStop()
}

代码无法按预期工作。

如果你能帮助我解决这个问题,我真的很感激!

修改 这就是我在ChordsListActivity中得到的内容,这是调用PopUpInfoActivity的活动,但我在if()语句中没有得到的内容。

Intent legendaIntent = new Intent(ChordsListActivity.this, PopUpInfoActivity.class);
    if(/*what's here?*/)
        startActivity(legendaIntent);

2 个答案:

答案 0 :(得分:1)

在MainActivity中读取您的首选项键(Show_Dialog),如果为true,则启动PopUpInfoActivity,否则启动ChordsListActivity。

逻辑应该在母亲活动中

在PopUpInfoActivity中,如果用户签出ChekBox,您应该只将首选项键编辑为false

为此,请在res / xml下创建一个preferences.xml文件,在这个文件中你必须创建一个你将存储在PopUpInfoActivity.Checkbox状态内的键(布尔值),默认为(True)

这是一个例子

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor preferencesEditor = sharedPref.edit();
    preferencesEditor.putBoolean("Show_Dialog", false);
    preferencesEditor.commit();     

您应该从MainActivity中读取此值:

load

如果showDlg为true,则弹出对话框,否则继续你想做的事。

当然,如果用户选中复选框,您需要更改Show_Dialog的值,您可以这样做:

SELECT right(your_column, 
len(your_column) - Charindex('BAZ', your_column, 1) + 1) 
FROM
your_table

通过这种方式,您可以确保下次用户启动应用程序时,您的主要活动会将Show_Dialog读为false

祝你好运

答案 1 :(得分:0)

首先,super.onCreate()必须是任何活动onCreate()中的第一个电话。

其次,将SharedPrefence的值存储在布尔值中,而不是直接设置CheckBox,并在setContentView()之前使用该值来完成当前Activity并启动下一个如果是真的。如果没有,继续使用UI内容以及您需要的任何其他内容。