SharedPreferences - einen Wert setzen

C

CROupier

Gast
Hallo, könnte mir jemand beim Lösen des folgenden Problems behilflich sein. Vielen Dank im Voraus. Es geht um Folgendes: meine Preferences Activity enthält zwei ListPreferences - Gebäude und Räume. Abhängig davon welches Gebäude ausgewählt wird, ändert sich die Liste mit Räumen dementsprechend. Soweit so gut.

PHP:
public class MyPreferences extends PreferenceActivity implements OnSharedPreferenceChangeListener {
  private static String url = "http://10.0.2.2/myapp/get-rooms/bid/";

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    ...
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
    sp.registerOnSharedPreferenceChangeListener(this);
    ...
  }

  @Override
  public void onSharedPreferenceChanged(SharedPreferences sp, String key) {
    if (key.equals("building")) {
      String url = url + sp.getString(key, "");
      updateRoomList(url);
      Log.e("sp room", sp.getString("room", ""));
    }
    ...		
  }

Nun möchte ich, wenn ich das Gebäude ändere aber einen Raum (noch nicht) auswähle, dass der share preference Wert vom Raum auf null oder "" gesetzt wird. Bei mir enthält die shared preference noch immer den alten Wert.

Zur Verdeutlichung: Wähle ich z.B. Gebäude A und Raum 4 aus, liefert sp.getString("room", "") eine 4 zurück. Ändere ich die Auswahl auf Gebäude B, aktualisiert sich die Liste mit Räumen. Wähle ich aber keinen Raum aus, so bekomme ich nach wie vor mit sp.getString("room", "") die 4 zurück. Wie kann ich dies ändern. Ich bräuchte in diesem Fall am besten einen leeren String. Vielen Dank.
 
Ich versteh noch nicht so ganz was passiert! Ich rate also nur!
Wenn ich mein building wechsel und mein room bleibt aber der gleiche raum, dann muss beim bulding switch nur noch rein gecodet werden, das mit dem wechsel der gebäude die rooms variabe = null sein muss, bzw "",

Der ursprüngliche Beitrag von 00:00 Uhr wurde um 00:00 Uhr ergänzt:

Im moment sieht mir das nach einer vergessenen code zeile aus
 
... nicht ganz, eine Änderung der Auswahl in der Liste mit den Gebäuden führt dazu, dass ein Update auf die bestehende Liste mit Räumen durchgeführt wird d.h. bestehende Einträge werden entfernt, Neue kommen dazu.

PHP:
private void updateRoomList(url) {
  ListPreference lp = (ListPreference) findPreference("room");
  lp.setEntries(null);
  lp.setEntryValues(null);
  ...
  for (...) {
    entries[i] = c.getString("name");
    values[i] = c.getString("id");
  }
  ...
  lp.setEntries(entries);
  lp.setEntryValues(values);
  ...

Nun, wenn ich aus der neuen / updateten Liste mit Räumen keinen Raum auswähle, will ich dass der shared preference Wert von room auf null bzw. lerren String gesetzt wird.

Der ursprüngliche Beitrag von 12:39 Uhr wurde um 12:45 Uhr ergänzt:

Meine momentane Lösung sieht wie folgt aus:

PHP:
@Override
public void onSharedPreferenceChanged(SharedPreferences sp, String key) {
  if (key.equals("building")) {
    sp.unregisterOnSharedPreferenceChangeListener(this);
    SharedPreferences.Editor editor = sp.edit();
    editor.putString("room", null);
    editor.commit();
    sp.registerOnSharedPreferenceChangeListener(this);
    
    String url = url + sp.getString(key, ""); 
    updateRoomList(url); 
  }
		
  if (key.equals("room")) {
    // startActivity(new Intent(this, MainActivity.class));
  }

Für evtl. bessere Umsetzungsmöglichkeiten bin ich dankbar.
 
Zuletzt bearbeitet von einem Moderator:

Ähnliche Themen

R
  • RalfKahl
Antworten
10
Aufrufe
307
RalfKahl
R
5
Antworten
22
Aufrufe
1.423
590239
5
A
Antworten
1
Aufrufe
637
swa00
swa00
Zurück
Oben Unten