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