Android 应用程序退出并重新启动后保存和恢复AlertDialog SetSingleChoice选项

Android 应用程序退出并重新启动后保存和恢复AlertDialog SetSingleChoice选项,android,android-actionbar,Android,Android Actionbar,我正在使用DialogBuilder在ActionBar中使用SingleChoiceItems。即使在退出应用程序后,我也需要保存所选项目,然后在再次访问应用程序时恢复保存的设置 我看到了许多共享首选项、onRestoreInstanceState和onSaveInstanceState的示例,但我很困惑。下面是代码和我所做的解释 对话框生成器 我在->selectPosition.中保存了所选选项的当前状态。。然后将选中在全局变量中保存selectedPosition并将其设置为Select

我正在使用DialogBuilder在ActionBar中使用SingleChoiceItems。即使在退出应用程序后,我也需要保存所选项目,然后在再次访问应用程序时恢复保存的设置

我看到了许多共享首选项、onRestoreInstanceState和onSaveInstanceState的示例,但我很困惑。下面是代码和我所做的解释

对话框生成器

我在->selectPosition.中保存了所选选项的当前状态。。然后将选中在全局变量中保存selectedPosition并将其设置为SelectSingleChoice参数

public void displaySortDialog(final Context context) {

    int selection = context.getSharedPreferences(PREF_NAME,
            Context.MODE_MULTI_PROCESS).getInt("Selection_key", 0);
    Toast.makeText(getApplicationContext(), "Start Sel :"+selection , Toast.LENGTH_SHORT).show();
    CharSequence[] sort_options = { "Z-A", "A-Z", "Size" };

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(getString(R.string.sort_apps));
    builder.setSingleChoiceItems(sort_options, selection,
        new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,
                        int selected_sort) {
                    /*
                     * Toast.makeText(getApplicationContext(),
                     * sort_options[selected_sort], Toast.LENGTH_SHORT)
                     * .show(); // isChecked = restoredChecked;
                     */
                }
            });

    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            // saving
            context.getSharedPreferences(PREF_NAME,
                    Context.MODE_MULTI_PROCESS).edit()
                    .putInt("Selection_key", id ).commit();
            Toast.makeText(getApplicationContext(), "Choosen :"+id, Toast.LENGTH_SHORT).show();
        }
    });
    builder.setNegativeButton("Cancel",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            });

    builder.create().show();
}
声明和使用displaySortDialog函数

使用以下代码,当我长按home(主页)按钮或从应用程序中按home(主页)按钮时,所选设置似乎正常。它们被选中并保存为我toast消息,以确保它们被选中,这意味着onSaveInstanceState正在工作,因为onSaveInstanceState中的toast消息已显示。但是当我尝试恢复通过onRestoreInstanceState保存的设置时,它就不起作用了。退出应用程序后,设置将返回默认设置

public void onRestoreInstanceState(Bundle savedInstanceState) {
    if(savedInstanceState != null){ 
        isChecked = savedInstanceState.getInt("SELECTED_SORT_ITEM");
        Toast.makeText(getApplicationContext(), "RESTORED: "+isChecked, Toast.LENGTH_SHORT).show();
    }    
}

public void onSaveInstanceState(Bundle savedInstanceState) {
    //outState.putInt(SELECTED_SORT_ITEM, getActionBar().getSelectedNavigationIndex());
    super.onSaveInstanceState(savedInstanceState);
    savedInstanceState.putInt(SELECTED_SORT_ITEM, isChecked);
    Toast.makeText(getApplicationContext(), SELECTED_SORT_ITEM+isChecked, Toast.LENGTH_SHORT).show();
}
当我从应用程序中按下home(主页)按钮或长按home(主页)按钮并再次选择应用程序时,会显示SaveInstanceStore上的toast。但退出应用程序后,我无法恢复所选设置

如果您能帮助我使用这些方法或了解其他方法,我们将不胜感激。

使用共享首选项

比如:


好的,所以我应该在积极按钮中应用保存代码,即警报对话框SetSingleChoiceItem的Ok按钮,为了检索choosen设置,我应该使用我声明SetSingleChoice对话框的检索方法???是的,当用户按下积极按钮时,将所选值保存到首选项中,当下次弹出对话框时,只需将选择默认设置为用户保存值。感谢您提供的重要提示,谢谢。对不起,我是lol,但我现在有一个问题是上下文和其他变量,如PREF_NAME、selection和selectedPosition。问题是我应该在哪里声明这些变量,无论是本地变量还是全局变量。如果我在displaySortDialog函数中定义它们,那么变量和需要是final并初始化,否则会发生错误。能否请您提供帮助??在单击正按钮时,使用您的selectedPosition变量。PREF\u NAME将其定义为字符串常量somewehre,例如公共最终静态字符串PREF\u NAME=my\u prefs;
public void onRestoreInstanceState(Bundle savedInstanceState) {
    if(savedInstanceState != null){ 
        isChecked = savedInstanceState.getInt("SELECTED_SORT_ITEM");
        Toast.makeText(getApplicationContext(), "RESTORED: "+isChecked, Toast.LENGTH_SHORT).show();
    }    
}

public void onSaveInstanceState(Bundle savedInstanceState) {
    //outState.putInt(SELECTED_SORT_ITEM, getActionBar().getSelectedNavigationIndex());
    super.onSaveInstanceState(savedInstanceState);
    savedInstanceState.putInt(SELECTED_SORT_ITEM, isChecked);
    Toast.makeText(getApplicationContext(), SELECTED_SORT_ITEM+isChecked, Toast.LENGTH_SHORT).show();
}
    // For saving
    context.getSharedPreferences(PREF_NAME,Context.MODE_MULTI_PROCESS)
    .edit()
    .put("Selection_key",selectedPosition)
    .commit();

    //For retrieve
    int selection = context.getSharedPreferences(PREF_NAME,Context.MODE_MULTI_PROCESS)
    .getInt("Selection_key",0); // 0 being default selection value, put whatever u want

   // int selection, Use this Selection for your UI