2014-09-19 22 views
0

我使用SingleChoiceItemsActionBar使用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顯示的敬酒。但退出應用後,我無法恢復所選設置。

如果你能幫助我用這些方法或知道一些其他方法,將不勝感激。

回答

0

使用共享偏好,

,如:

// 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 
+0

行,所以我應該應用** **保存中的代碼「肯定按鈕」,即警報對話框SetSingleChoiceItem的OK按鈕, 檢索選擇的設置我應該使用檢索方法,我聲明SetSingleChoice對話框? – SharingIsCaring 2014-09-19 11:14:04

+0

是的,當用戶按下肯定按鈕將選定值保存到首選項中,並且下次彈出對話框時,只需將選擇默認設置爲用戶保存的值即可。 – Techfist 2014-09-19 11:45:53

+0

感謝您的重要提示,讚賞。對不起行動noob問題(我是大聲笑)但我現在有一個問題是「上下文」和其他變量,如「PREF_NAME」,「選擇」和「selectedPosition」..問題是我應該在哪裏宣佈這些變量whehter本地或全球。如果我將它們定義在displaySortDialog()函數內,那麼該變量需要進行最終初始化,否則會發生錯誤。你能幫忙嗎? – SharingIsCaring 2014-09-22 11:30:11

相關問題