2010-11-10 83 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数据库,而不必从存储在数据库中的字符串中找出想要的选择位置。这适用于我简单的备忘录应用程序,但显然不会工作,如果您需要将数据库中的微调器输出存储为字符串。