Globale Variable zwischen Fragments

  • Antworten:12
  • OffenNicht stickyNicht beantwortet
  • 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

Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.165

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?
Diskutiere mit!
  • Forum-Beiträge: 2.901

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?
Diskutiere mit!
  • 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?
Diskutiere mit!
  • 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?
Diskutiere mit!
  • Forum-Beiträge: 2.243

22.02.2018, 20:46:31 via Website

Du kannst im Bundle ja beliebig viele Daten speichern, du musst nur unterschiedliche keys verwenden beim Aufruf der jeweiligen put() Methode, sonst überschreibst du die Daten immer wieder.

Hilfreich?
Diskutiere mit!
  • 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?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.165

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?
Diskutiere mit!
  • 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?
Diskutiere mit!
  • 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?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.165

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?
Diskutiere mit!

Empfohlene Artikel