Globale Variable zwischen Fragments

  • Antworten:12
Hans M.
  • Forum-Beiträge: 32

19.02.2018, 20:47:11 via Website

Ich habe ein App mit 2 Fragments, im ersten ist eine EditBox und das wollte ich gerne auslesen und im zweiten Fragment anzeigen lassen. Mit Globalen Variablen habe ich es zwischen Activity geschaft, aber ich will es zwischen zwei Fragments machen.

Hoffe ihr könnt mir helfen.

Danke im voraus

Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

19.02.2018, 20:51:43 via Website

Hallo Hans,
bei Datenübergabe zwischen Activities &/| Fragments sollte man keine globalen Variablen benutzen sondern bie Activities lieber Intent#setExtras() <> getIntent().getExtras() und bei Fragments übers Bundle:
http://www.androhub.com/android-pass-data-from-activity-to-fragment/

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Hans M.
Kommentieren
swa00
  • Forum-Beiträge: 3.704

19.02.2018, 20:55:37 via Website

Zusatz :

Oder man kann SingleTon Klasse verwenden.

— geändert am 19.02.2018, 20:56:00

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Hans M.Pascal P.
Kommentieren
Hans M.
  • Forum-Beiträge: 32

19.02.2018, 20:59:50 via Website

Danke Pascal,
wie ist es wenn ich aber Daten von Fragment zu Fragment übertragen will?

— geändert am 19.02.2018, 21:02:39

Hilfreich?
Kommentieren
swa00
  • Forum-Beiträge: 3.704

19.02.2018, 21:03:34 via Website

Auch mit beiden oben erwähnten Techniken Bundle/Intents/SingleTon
https://stackoverflow.com/a/16036693/6337627

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Hans M.
Kommentieren
Hans M.
  • Forum-Beiträge: 32

19.02.2018, 21:25:50 via Website

Danke dir swa00

Hilfreich?
Kommentieren
Hans M.
  • Forum-Beiträge: 32

22.02.2018, 19:57:41 via Website

Hallo ich bin es wieder. Ich habe es mit dem Bundle gemacht, aber ich habe ein Problem. Mein Problem ist das ich ein Fragment habe wo man z.B. den Namen ein gibt. Da speicher ich den Wert im Bundle und gehe zum nächsten Fragment und speicher dort was anders ein. Wenn ich nun mir die Sachen aus den beiden Fragments auf einen weiteren Fragment anzeigen lassen will geht es nicht. Es wird nur der Wert den ich als letztes eingespeichert haben. Wie kann ich das Problem beheben, habt ihr eine Idee?

Hilfreich?
Kommentieren
Hans M.
  • Forum-Beiträge: 32

23.02.2018, 19:34:58 via Website

Das habe ich auch so gemacht.
Hier mein Code:

Fragment 1

weiter.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String nameFragment = name.getText().toString();

            Bundle bundle = new Bundle();
            bundle.putString("NameFragment",nameFragment);

            FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

            KontoerstellenEMail kontoerstellenEMail = new KontoerstellenEMail();
            kontoerstellenEMail.setArguments(bundle);

            fragmentTransaction.replace(R.id.fragment_container, kontoerstellenEMail);
            fragmentTransaction.commit();
        }
    });

Fragment 2

weiter.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String mail = email.getText().toString();

            Bundle bundle = new Bundle();
            bundle.putString("E-Mail",mail);

            FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

            AusgabeFragment ausgabeFragment  = new AusgabeFragment();
            ausgabeFragment.setArguments(bundle);

            fragmentTransaction.replace(R.id.fragment_container, ausgabeFragment);
            fragmentTransaction.commit();
        }
    });

Ausgabe Fragment

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_kontoerstellen_passwort, container, false);

    name = (TextView) view.findViewById(R.id.name);
    mail = (TextView) view.findViewById(R.id.email);


    Bundle bundle = getArguments();
    nameAusgabe = bundle.getString("NameFragment");
    emailAusgabe = bundle.getString("E-Mail");


    name.setText(nameAusgabe);
    mail .setText(emailAusgabe);

Aber was als Ausgabe kommt ist nur die E-mail und nicht der Name. Könnt ihr mir weiter helfen?

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

23.02.2018, 19:53:23 via App

Edit: Warum 2 OnCllick listener auf den Button? Du muss in einem Listener Name und E-Mail vom Edittext abrufen und dann ins Bundle schicken. So gilt nur das 2. onCklick.

— geändert am 23.02.2018, 19:54:48

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Hans M.
  • Forum-Beiträge: 32

23.02.2018, 20:00:55 via Website

Das sind 2 verschiedenen Fragmente. Beim ersten gebe ich den Namen ein und bestätigen mit einem Button und beim anderen Fragment die E-Mail und bestätigen mit einem anderen Button. Der erste onclick listener ist für das Fragment mit dem Namen und der 2. onclick listener ist für das Fragment mit der E-Mail. Das sind 2 verschiedenen Buttons.
Ja ich weiß die Buttons haben den gleichen ist ein Fehler von mir.

— geändert am 23.02.2018, 20:07:38

Hilfreich?
Kommentieren
Hans M.
  • Forum-Beiträge: 32

24.02.2018, 13:35:43 via Website

Ich frage die Frage mal anders vielleicht ist es dann verständlicher.
Ich will mit der Methode Bundle Daten zwischen mehreren Fragmenten speichern und beim letzten Fragment dann ausgeben. Das heißt ich habe ein Fragment wo ich was eingeben. Dann wechsel ich zum anderen Fragment und speichere dort etwas anders ein und immer so weiter. Zum Schluss geben ich die Daten alle aus. Ist das möglich und wenn ja wie? Wenn es nicht möglich ist gibt es ein andere Methode und das zu machen?

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

25.02.2018, 09:57:45 via App

Geht genau so, allerdings musst du trotzdem Name und Email in ein Bundle packen wenn du die Daten in einem Fragment auslesen willst.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Hans M.
Kommentieren