在下面的代码中,我正在设置一个微调器,监听和检测微调器的选择。
问题是我试图保存以前选择的值,因此它在活动重新加载之间是持久的,但是当我重新加载活动时,之前选择的值不会被设置为微调器值。代码如下:
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 :(得分:2)
您永远不会从SharedPreferences
开始阅读。你正在给他们写信(至少,我认为这是mGameSettings
),但不是从他们那里读。
spinner.setSelection(spinner.getSelectedItemPosition());
这是一个无意义的陈述。您正在将微调器的选择设置为其当前选择。如果您想将微调器的选择设置为SharedPreferences
中的值,则需要读取SharedPreferences
中的值。
答案 1 :(得分:0)
我找到了一个解决方案,可以在简单的情况下在Android应用中保持微调器的状态。
在我的应用中,我的微调器有三个值(正常,重要和紧急)。最初,这些值作为字符串存储在SQLite
数据库中。
我的解决方案涉及将spinner值存储为SQLite数据库中的整数,然后使用以下代码在重新加载活动时设置微调器值:
int temp = (int) memo.getInt(memo.getColumnIndexOrThrow(MemoDbAdapter.KEY_MODE));
mModeText.setSelection(temp);
这允许我直接从SQLite数据库传递数据,而不必从存储在数据库中的字符串中找出所需选择的位置。这适用于我的简单Memo应用程序,但如果您需要将微调器输出存储为数据库中的字符串,则显然不起作用。