1

値を設定するスピナーがいくつかあります。そのうちの 4 つです。起動間で現在の設定を保持してほしい。スピナーで値を選択すると、 updateSettings ボタンが押されるまでその値は保存されません。どうすればいいですか?

ここにいくつかのコードがあります.onCreateでデフォルト値でスピナーを作成します:

    mBaudSpinner = (Spinner) findViewById(R.id.bannerBaudSpinner);
    ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(
            this, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    mBaudSpinner.setAdapter(adapter);
    String[] tempArray = SlickUSB2Serial.BAUD_RATES;
    for (int i = 0; i < tempArray.length; i++) {
        adapter.add(tempArray[i]);
    }
     mBaudSpinner.setSelection(SlickUSB2Serial.BaudRate.BAUD_9600.ordinal());


    mDataSpinner = (Spinner) findViewById(R.id.bannerDataSpinner);
    adapter = new ArrayAdapter<CharSequence>(this,
            android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    mDataSpinner.setAdapter(adapter);
    tempArray = SlickUSB2Serial.DATA_BITS;
    for (int i = 0; i < tempArray.length; i++) {
        adapter.add(tempArray[i]);

    }
    mDataSpinner
            .setSelection(SlickUSB2Serial.DataBits.DATA_8_BIT.ordinal());

    mParitySpinner = (Spinner) findViewById(R.id.bannerParitySpinner);
    adapter = new ArrayAdapter<CharSequence>(this,
            android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    mParitySpinner.setAdapter(adapter);
    tempArray = SlickUSB2Serial.PARITY_OPTIONS;
    for (int i = 0; i < tempArray.length; i++) {
        adapter.add(tempArray[i]);

    }
    mParitySpinner.setSelection(SlickUSB2Serial.ParityOption.PARITY_NONE
            .ordinal());

    mStopSpinner = (Spinner) findViewById(R.id.bannerStopSpinner);
    adapter = new ArrayAdapter<CharSequence>(this,
            android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    mStopSpinner.setAdapter(adapter);
    tempArray = SlickUSB2Serial.STOP_BITS;
    for (int i = 0; i < tempArray.length; i++) {
        adapter.add(tempArray[i]);

    }
    mStopSpinner
            .setSelection(SlickUSB2Serial.StopBits.STOP_1_BIT.ordinal());

updateSettings をクリックすると、次のコードが実行されます。

else if (v == mUpdateSettings) {
            if (mSelectedAdapter == null) {
                return;
            }

            mSelectedAdapter.setCommSettings(BaudRate.values()[mBaudSpinner
                    .getSelectedItemPosition()], DataBits.values()[mDataSpinner
                    .getSelectedItemPosition()],
                    ParityOption.values()[mParitySpinner
                            .getSelectedItemPosition()],
                    StopBits.values()[mStopSpinner.getSelectedItemPosition()]);

   } 

例として、1 つのスピナーにこのような設定を使用しようとしていますが、正しい軌道に乗っていますか?

 SharedPreferences prefs;
         prefs = PreferenceManager.getDefaultSharedPreferences(this);
         SharedPreferences.Editor prefEditor = prefs.edit();
         prefEditor.putString("savedValue",mBaudSpinner.getSelectedItem().toString());
         prefEditor.commit();
         String username = prefs.getString("savedValue", String.valueOf(SlickUSB2Serial.BaudRate.BAUD_9600.ordinal()));
         mBaudSpinner.setSelection(Integer.parseInt(username));

onCreate とボタン クリック リスナーの両方で使用できるように、sharedPrefs をグローバルにしますか? 次に、例として、スピナーのデフォルト値を設定する行を次のように変更します。

String username = prefs.getString("savedValue", String.valueOf(SlickUSB2Serial.BaudRate.BAUD_9600.ordinal()));
             mBaudSpinner.setSelection(Integer.parseInt(username));

次に、ボタンリスナーに値を保存することに関する他のものを入れますか? 私はこれを試していますが、状態は保存されず、常にデフォルトで間違った値になります。私がしていることは正しいですか?

編集

これらの行はデフォルト値を正しく設定していないようです。なぜですか?

prefs = PreferenceManager.getDefaultSharedPreferences(this);
         String username = prefs.getString("savedValue", Integer.toString(SlickUSB2Serial.BaudRate.BAUD_9600.ordinal()));
         mBaudSpinner.setSelection(Integer.parseInt(username)); 
4

1 に答える 1

1

あなたが電話するとき、見てください:

 mBaudSpinner.getSelectedItem()

オブジェクトを取得し、それを文字列に変換します。電話すると:

 mBaudSpinner.setSelection(Integer.parseInt(username))

文字列を取得して int に変換します。ただし、setSelectionshouldint 位置を受け取り、getSelectedItem はアイテムの位置ではなくオブジェクトを返します。

于 2013-03-15T13:03:04.413 に答える