2010-11-10 79 views
0

在下面的代碼中,我設置了一個微調器,偵聽和檢測微調器中的選擇。堅持微調器選定的值

問題是我想保存之前選定的值,以便它在活動重新加載之間保持不變,但是當我重新加載活動時,以前選擇的值未設置爲微調器值。代碼如下:

final Spinner spinner = (Spinner)findViewById(R.id.Spinner_gender); 

    ArrayAdapter<?> adapter = ArrayAdapter.createFromResource(this, spinnerID, android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter); 

    spinner.setOnItemSelectedListener(
    new AdapterView.OnItemSelectedListener() { 
    public void onItemSelected(AdapterView<?> parent, View itemSelected, int selectedItemPosition, long selected){ 
     Editor editor = mGameSettings.edit(); 
     editor.putLong(GAME_PREFERENCES_GENDER, selectedItemPosition); 
     editor.commit(); 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 
    // TODO Auto-generated method stub 

    } 

} 
); 

    //if(mGameSettings.contains(GAME_PREFERENCES_GENDER)){ 
    Toast.makeText(QuizSettingsActivity.this, "Detected(again): " + spinner.getSelectedItemPosition(), Toast.LENGTH_SHORT).show(); 
    spinner.setSelection(spinner.getSelectedItemPosition()); 
    //} 

我使用spinner.getSelectedItemPosition()得到微調選定的索引。任何人都可以告訴我我做錯了什麼?

+0

通過「活動重新加載」,你是指在完全獨立的活動啓動之間保持已保存的狀態?或者你的意思是當活動仍然在記憶中,然後再次拉起(例如從你的內部啓動一個單獨的活動,然後點擊「後退」鍵返回到你的活動)?這是兩個不同的情況,有不同的答案。 – 2010-11-10 22:26:13

+0

當您的活動仍在堆棧中時,Android應該自動保存微調器的狀態,但是如Alexander提到的,當活動從堆棧中移出時,它將被清除。 – 2010-11-11 01:17:23

回答

2

你永遠不會讀你的SharedPreferences。你正在給他們寫信(至少,我認爲這是mGameSettings是),但沒有閱讀它們。

spinner.setSelection(spinner.getSelectedItemPosition());

這是無稽之談。您正在將微調器的選擇設置爲當前選擇。如果您想將微調器的選擇設置爲SharedPreferences的值,則需要讀取SharedPreferences中的值。

+0

感謝您的回覆。 – sisko 2010-11-11 21:31:24

+0

感謝您的回覆。也許你是對的,spinner.setSelection(spinner.getSelectedItemPosition())是很多無稽之談 - 或者你認爲。我在spinner.setOnItemSelectedListener()函數中設置了sharedpreference。在底部外部,我只是檢查sharedpreference退出並使用spinner.setSelection(spinner.getSelectedItemPosition())使選定選項持續,以便下次訪問該活動時,微調器默認爲先前選擇的值 – sisko 2010-11-11 21:50:54

0

我發現了一種在簡單情況下堅持Android應用程序中spinners狀態的解決方案。

在我的應用程序中,我的微調器有三個值(正常,重要和緊急)。最初,這些值作爲字符串存儲在SQLite數據庫中。

我的解決辦法涉及而不是存儲噴絲值作爲SQLite數據庫整數,然後使用以下代碼來設置微調值時活性被重新加載:

int temp = (int) memo.getInt(memo.getColumnIndexOrThrow(MemoDbAdapter.KEY_MODE)); 
mModeText.setSelection(temp); 

這讓我通過從數據SQLite數據庫,而不必從存儲在數據庫中的字符串中找出想要的選擇位置。這適用於我簡單的備忘錄應用程序,但顯然不會工作,如果您需要將數據庫中的微調器輸出存儲爲字符串。