TextView, das Wert von SharedPreferences erhält, zeigt nichts an, obwohl es Standardwerte geben sollte

Ich habe ein Problem mitSharedPreferences das ist irgendwie komisch.

Ich habe einActivity das hält einFragment in einemViewPager. Das Fragment zeigt ein Symbol und einen Text. Sie können das Symbol (Häkchen oder Kreuz, Häkchen ist Standard) und den in diesem Fragment angezeigten Text aus einer anderen Aktivität ändern. Die Daten werden dann mit einer Absicht in die Fragment-Container-Aktivität übertragen.

Nun möchte ich den Text und das ausgewählte Symbol speichern, sodass das Fragment mit demselben Text und Symbol angezeigt wird, auch wenn Sie die App schließen und später neu starten.

So habe ich versucht, dies mit @ zu erreichSharedPreferences, aber als ich es versuchte, zeigte mir mein Fragment keinen Text und das falsche Symbol, obwohl ich Standardwerte festgelegt habe und das Symbol immer das Kreuz ist, egal was es vorher war, obwohl das Standardsymbol das Häkchen sein sollte.

Ich speichere die Werte inonCreateView() meines Fragments, wenn es mit den Daten erstellt wird, die der Benutzer in der vorherigen Aktivität eingegeben hat.

Speichern:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPref.edit();

            Bundle bundle = getArguments();

            String city = bundle.getString("city");
            String country = bundle.getString("country");
            int ok = bundle.getInt("ok");

            TextView cityText = (TextView) view.findViewById(R.id.city_name);
            TextView countryText = (TextView) view.findViewById(R.id.country_name);
            ImageView shownIcon = (ImageView) view.findViewById(R.id.ok_bad_icon);

            cityText.setText(city);
            countryText.setText(country);

            if(ok == 1){
             shownIcon.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.checkmark_icon, null));
            }else{
                shownIcon.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bad_icon, null));
            }

            editor.putString("city", city);
            editor.putString("country", country);
            editor.putInt("okBad", ok);
            editor.putString("saved", "Yes");

            editor.apply();

Dann erhalte ich die Werte inonCreate() meiner Aktivität, die das Fragment enthält:

SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();
String storedSave = sharedPref.getString("saved", "no");

    if (storedSave.equalsIgnoreCase("yes")){

    String storedCity = sharedPref.getString("city", "berlin");
    String storedCountry = sharedPref.getString("country", "germany");
    int storedOkBad = sharedPref.getInt("okBad", 1);

        Bundle extras = new Bundle();

        StatusFragment savedFragment = new StatusFragment();

        extras.putString("city", storedCity);
        extras.putString("country", storedCountry);
        extras.putInt("okBad", storedOkBad);

        savedFragment.setArguments(extras);

        mSectionsPagerAdapter.addFragment(savedFragment, extras.getString("city"));
    }

Ich habe hier auf stackoverflow in verschiedenen Fragen nach Antworten gesucht, aber keine davon hat für mich funktioniert, wie zum Beispiel:

Kann nicht den Wert von sharedpreferences erhalten

Geteilte Einstellungen gehen verloren, nachdem das Gerät heruntergefahren oder die App beendet wurde

Shared Preferences Daten zurücksetzen, wenn App erzwungen geschlossen oder Gerät neu gestartet wird

SharedPreferences erhalten immer den Standardwert

Wie verwende ich SharedPreferences in Android, um Werte zu speichern, abzurufen und zu bearbeiten?

Ich habe es auch mit @ versucLog.w() undToast.makeText(), um den Wert der Stadt zu drucken, aber es wird nie etwas angezeigt, zum Beispiel, wenn sie komplett übersprungen wird, aber warum habe ich einFragment in meinemActivity dann nach dem Neustart, wenn dies übersprungen wird und es nicht hinzugefügt wird?

Und muss ich @ verwendedit().putString().apply() beim editieren oder kann ich einfach den wert mit @ addiereditor.putString() auch wenn es schon existiert?

Tut mir leid, wenn es vielleicht etwas Triviales ist, aber ich habe nicht viel mit Fragmenten gearbeitet und benutzeSharedPreferences das erste mal jetzt.

Ich wäre für jede hilfreiche Antwort dankbar.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage