Fragment nach dem schließen sichern

Hallo Experten,

ich habe eine kleine Frage, dessen Lösung mir bislang nicht bekommen ist.
Ich programmiere momentan eine kleine Android-App, die verschiedene Rechner beinhaltet. Diese sind über eine Navigation-Bar ansteuerbar, welche automatisch von Android Studio erstellt wurde.
Wenn man in die EditTexts etwas eingibt und dann in ein anderes Fragment wechseln muss, geht der Inhalt der Felder verloren.
Ich habe jetzt schon eine Weile nach Lösungen mit SavedInstanceState probiert, aber das tut bei mir nicht. Auch nicht, wenn ich das Handy nur drehe statt das Frame zu wechseln. So wie ich es verstanden habe ist das mit SavedInstanceState auch nur dann brauchbar, wenn ich das Fragment nicht verlasse, also das Bild nur durch andere Umstände neu laden muss.

Frage: Gibt es eine Möglichkeit Inhalte von EditTexts und TextViews zu speichern, auch wenn man das Fragment verlässt und ein anderes offen hatte?

Wenn jemand Code braucht, z.B. von meinem Versuch des SavedInstanceState kann ich es gerne noch nachreichen.

Vielen Dank schonmal für die Hilfe,
Christopher

Hallo, ich leite meine Antwort aus zwei Links ab:
https://developer.android.com/guide/components/activities/activity-lifecycle (siehe dort „Figure 1. A simplified illustration of the activity lifecycle.“)
und
https://stackoverflow.com/questions/29116128/android-retain-and-restore-fragment-state-after-replace

demnach solltest du onCreateView und onDestroyView überschreiben, damit Bundle savedState; auch nach Fragmentwechseln erhalten bleibt. Ich hoffe, hab dich richtig verstanden.

Vielen Dank für die schnelle Antwort. Ich bin bis jetzt nicht dazu gekommen es umzusetzen.

bei mir funktioniert savedState.putString(„key“, „test_text“); nicht, weil es dabei zu einer NullPointerException kommt.

Anbei der möglicherweise relevante Code:

private TextView eTest;
Bundle savedState;

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    layout = inflater.inflate(R.layout.fragment_kh, null);
    editText_einlesen();
    einlesen();

    //Test
    eTest = layout.findViewById(R.id.testfeld);

    //state wird hier wiederhergestellt
    if (savedState != null) {
        String gespeicherte_Variable = savedState.getString("key");
        eTest.setText(gespeicherte_Variable);
        Log.d("test1", "nicht fail");
    } else {
        Log.d("test1", "fail");
    }

    //Button definieren
    brechne = layout.findViewById(R.id.rechne);
    brechne.setOnClickListener(new Rechenaktion());


    return layout;
}
@Override
public void onDestroyView(){
    super.onDestroyView();
    try {
        savedState.putString("key", "test_text");
        Log.d("test1", "das ist nicht das Problem");
    }catch (NullPointerException x){
        Log.d("test1", "ist doch das Problem");
    }
}

Moin,

Bundle savedState; ist nicht Initialisiert.

Hallo,

Ich habe jetzt mal bei onCreateView savedInstanceState zu savedState ersetzt und onDestroyView wird auch das Bundle savedState übergeben. Letzteres führt dazu, dass onDestroyView gar nicht mehr aufgerufen wird und ohne dem wird immer die NullPointerException getriggert.
in onCreateView wird „fail“ ausgegeben, also ist savedState null.

Kannst du mir bitte sagen wie ich ich das Bundle instantiiere? Ich dachte ich müsste es übergeben, aber irgendwie muss ihm ja ein Wert zugewiesen werden.

Danke