簡単に言えば、NumberPicker との間でデータを保存してからロードしようとしています。NumberPicker の setDisplayedValues() メソッドを使用して特定の値を選択する必要があるため、NumberPicker の値は最初に文字列配列で設定されます。
ロードに関しては、保存するのに問題はありません。私はその値が配列内で見つかった位置のインデックスを与える必要があると推測しているためです。これは私が試してきたものですが、役に立ちませんでした
minSpinNP.setValue(Integer.parseInt(spinValues[minSpinPos]));
maxSpinNP.setValue(Integer.parseInt(spinValues[maxSpinPos]));
Ibelieve numberPicker は int または文字列の配列を取る必要があります。prefs() をロードするときにもこのエラーが発生します
12-12 19:57:34.724: E/AndroidRuntime(7612): Caused by: java.lang.ClassCastException:
java.lang.String cannot be cast to java.lang.Integer
12-12 19:57:34.724: E/AndroidRuntime(7612):
at android.app.SharedPreferencesImpl.getInt(SharedPreferencesImpl.java:240)
12-12 19:57:34.724: E/AndroidRuntime(7612):
at sweetbix.android.shredbox.JumpSettings.loadPrefs(JumpSettings.java:228)
どんな助けでも大歓迎です:)
グローバル変数
SeekBar switchSlider;
RadioGroup directionRadioGroup;
RadioButton fsRadioBtn;
RadioButton bsRadioBtn;
RadioButton fsBsRadioBtn;
RadioButton dirOffRadioBtn;
SeekBar corkSlider;
SeekBar spinSlider;
SeekBar grabSlider;
NumberPicker minSpinNP;
NumberPicker maxSpinNP;
Button saveBtn;
boolean safe;
int maxSpinPos;
int minSpinPos;
private int switchProbability;
private int corkProbability;
private int spinProbability;
private int grabProbability;
private int spin = 0;
private int minSpin;
private int maxSpin;
private String[] spinValues = new String[8];
spinValues に追加された文字列
for (int i = 0; i < spinValues.length; i++) {
String rotation = Integer.toString(spin += 180);
spinValues[i] = rotation;
}
使用される保存方法、
private void savePrefs(String key, int value){
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
Editor editor = prefs.edit();
editor.putInt(key, value);
editor.commit();
}
numberpicker の onchangelistener、いくつかのコードがコメントされていますが、私が試したことを示しています。
maxSpinNP.setOnValueChangedListener(new OnValueChangeListener(){
@Override
public void onValueChange(NumberPicker picker, int oldVal,
int newVal) {
// TODO Auto-generated method stub
//maxSpin = Integer.parseInt(spinValues[maxSpinNP.getValue()]);
//maxSpin = spinValues[maxSpinNP.getValue()];
maxSpinPos = Arrays.asList(spinValues).indexOf(maxSpin);
Toast.makeText(JumpSettings.this,"maxspinpos:"+ maxSpinPos,
Toast.LENGTH_SHORT).show();
}
});
保存メソッドの呼び出し
savePrefs("MIN_SPIN_JUMPS", minSpinPos);
savePrefs("MAX_SPIN_JUMPS", maxSpinPos);
最後に loadprefs メソッドを呼び出し、より多くのコードがコメントされました
private void loadPrefs(){
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
switchProbability = prefs.getInt("SWITCH_JUMPS", 35);
switchSlider.setProgress(switchProbability);
corkProbability = prefs.getInt("CORK_JUMPS", 20);
corkSlider.setProgress(corkProbability);
spinProbability = prefs.getInt("SPIN_JUMPS", 80);
spinSlider.setProgress(spinProbability);
grabProbability = prefs.getInt("GRAB_JUMPS", 80);
grabSlider.setProgress(grabProbability);
minSpinPos = prefs.getInt("MIN_SPIN_JUMPS", 0);
maxSpinPos = prefs.getInt("MAX_SPIN_JUMPS", 7);
//minSpin = prefs.getString("MIN_SPIN_JUMPS", "180");
//minSpinNP.setValue(Integer.parseInt(spinValues[minSpinPos]));
//maxSpin = prefs.getString("MAX_SPIN_JUMPS", 1080);
//maxSpinNP.setValue(Integer.parseInt(spinValues[maxSpinPos]));
Log.e("min", "" + minSpinPos);
Log.e("max", "" + maxSpinPos);
//Log.e("prob", switchProbability + "");
}
これは228行目です
minSpinPos = prefs.getInt("MIN_SPIN_JUMPS", 0);