簡體   English   中英

選中CheckBox時退出以顯示活動

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM