我有一个带有&#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);
答案 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内容以及您需要的任何其他内容。