J'ai quelques filateurs où je définis des valeurs, quatre d'entre eux. Je veux qu'ils conservent les paramètres actuels entre les lancements. Lorsque vous sélectionnez une valeur dans le compteur, il ne doit pas enregistrer cette valeur tant que le bouton updateSettings n'est pas enfoncé. Comment je vais à ce sujet?Comment utiliser sharedPreferences ici?
ici est un code, en onCreate je fais fileurs avec des valeurs par défaut:
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());
Si je clique updateSettings, ce code est exécuté:
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()]);
}
Je suis en train d'utiliser les préférences comme celui-ci Pour un exemple, est-ce qu'il est sur la bonne voie?
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));
Que faites-vous, dois-je faire les sharedPrefs gavent mondiale afin qu'il puisse être utilisé à la fois onCreate et dans l'écouteur en cliquant le bouton? Modifiez ensuite les lignes qui définissent les valeurs par défaut pour les filateurs à quelque chose comme ceci comme exemple:
String username = prefs.getString("savedValue", String.valueOf(SlickUSB2Serial.BaudRate.BAUD_9600.ordinal()));
mBaudSpinner.setSelection(Integer.parseInt(username));
ensuite mettre les autres trucs sur l'enregistrement des valeurs dans l'écouteur bouton? J'essaye ceci mais l'état ne sauve pas et toujours par défaut à la valeur fausse. Est ce que je fais bien?
EDIT
Ces lignes ne semblent pas définir le droit de valeur par défaut, pourquoi est-ce?
prefs = PreferenceManager.getDefaultSharedPreferences(this);
String username = prefs.getString("savedValue", Integer.toString(SlickUSB2Serial.BaudRate.BAUD_9600.ordinal()));
mBaudSpinner.setSelection(Integer.parseInt(username));
Si votre classe est une activité, essayez d'utiliser 'getPreferences' ou' getSharedPreferences' au lieu de 'PreferenceManager.getDefaultSharedPreferences (this);' –
J'ai corrigé cette erreur, votre chemin a également donné un pointeur null. Apparemment, vous ne pouvez pas utiliser le contexte globalement? il provoque un nullpointer, donc je l'ai juste mis en place plus bas dans le code. Maintenant, mon problème reste est que la liste déroulante n'est jamais réglée – Paul
merci bruno, je vais chercher la différence. C'est une activité – Paul