保持微调器选定的值

时间:2010-11-10 22:07:38

标签: android persistence spinner

在下面的代码中,我正在设置一个微调器,监听和检测微调器的选择。

问题是我试图保存以前选择的值,因此它在活动重新加载之间是持久的,但是当我重新加载活动时,之前选择的值不会被设置为微调器值。代码如下:

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()来获取微调器选择的索引。谁能告诉我我做错了什么?

2 个答案:

答案 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应用程序,但如果您需要将微调器输出存储为数据库中的字符串,则显然不起作用。