我使用SingleChoiceItems
在ActionBar
使用DialogBuilder
。即使在退出應用程序後,我仍然需要保存所選項目,然後在再次訪問應用程序時恢復保存的設置。在應用程序退出並重新啓動後保存並恢復AlertDialog SetSingleChoice選項
我看到很多共享偏好的例子,onRestoreInstanceState()
和onSaveInstanceState()
但我很困惑。下面是解釋我做過什麼的代碼。
對話框生成
我保存在所選擇的選項的當前狀態 - > selectPosition ..然後保存selectedPosition
在全局變量isChecked
並將其設置爲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 funtion
public boolean onOptionsItemSelected(MenuItem item) {
boolean result = true;
result = menuChoice(item);
switch (item.getItemId()) {
case R.id.menu_Sort_By_Size: {
displaySortDialog(getBaseContext());
break;
}
case R.id.menu_Action_Search: {
// openSearch();
break;
}
default: {
result = super.onOptionsItemSelected(item);
break;
}
}
return result;
}
使用下面的代碼時,我長按home鍵或按home鍵從應用程序所選擇的設定似乎確定。他們被選中並保存爲我烤麪包的信息,以確保它們已被選中,這意味着onSaveInstanceState
正在工作,因爲顯示了onSaveInstanceState
中的烤麪包信息。但是當我嘗試恢復通過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鍵,再選擇該應用OnSaveInstanceRestore顯示的敬酒。但退出應用後,我無法恢復所選設置。
如果你能幫助我用這些方法或知道一些其他方法,將不勝感激。
行,所以我應該應用** **保存中的代碼「肯定按鈕」,即警報對話框SetSingleChoiceItem的OK按鈕, 檢索選擇的設置我應該使用檢索方法,我聲明SetSingleChoice對話框? – SharingIsCaring 2014-09-19 11:14:04
是的,當用戶按下肯定按鈕將選定值保存到首選項中,並且下次彈出對話框時,只需將選擇默認設置爲用戶保存的值即可。 – Techfist 2014-09-19 11:45:53
感謝您的重要提示,讚賞。對不起行動noob問題(我是大聲笑)但我現在有一個問題是「上下文」和其他變量,如「PREF_NAME」,「選擇」和「selectedPosition」..問題是我應該在哪裏宣佈這些變量whehter本地或全球。如果我將它們定義在displaySortDialog()函數內,那麼該變量需要進行最終初始化,否則會發生錯誤。你能幫忙嗎? – SharingIsCaring 2014-09-22 11:30:11