[英]NullPointerException when activity starts and checkbox is not checked
[英]Quit showing an Activity when CheckBox is checked
我有一個帶有“不再顯示”復選框的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
獲得的ChordsListActivity
,它是調用PopUpInfoActivity
的活動,但我沒有得到應放在if()
語句中的內容。
Intent legendaIntent = new Intent(ChordsListActivity.this, PopUpInfoActivity.class);
if(/*what's here?*/)
startActivity(legendaIntent);
在該MainActivity中,讀取您的首選項鍵(Show_Dialog),如果為true,則啟動PopUpInfoActivity,否則啟動ChordsListActivity。
邏輯應該在母親活動中
在PopUpInfoActivity中,僅當用戶簽出ChekBox時,才應將首選項鍵編輯為false。
為此,請在res / xml下創建一個preferences.xml文件,在該文件中,您必須創建一個密鑰(布爾值),並將其存儲在PopUpInfoActivity.Checkbox狀態下,默認值為(真)。
這是一個例子
<CheckBoxPreference
android:key="Show_Dialog"
android:defaultValue="true" />
您應該從MainActivity中讀取以下值:
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
Boolean showDlg = sharedPref.getBoolean("Show_Dialog", true);
如果showDlg為true,則彈出對話框,否則繼續您要執行的操作。
當然,如果用戶選中了該復選框,則需要更改Show_Dialog的值,您可以這樣做:
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor preferencesEditor = sharedPref.edit();
preferencesEditor.putBoolean("Show_Dialog", false);
preferencesEditor.commit();
這樣,您可以確保下次用戶啟動您的應用程序時,您的主要活動將Show_Dialog讀取為false
祝好運
首先, super.onCreate()
必須是任何Activity的onCreate()
的第一個調用。
其次,將SharedPrefence
的值存儲在布爾值中,而不是直接設置CheckBox
,並在setContentView()
之前使用它來完成當前的Activity
並啟動下一個(如果為true)。 如果沒有,請繼續處理UI內容以及您需要的其他任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.