Fragments austauschen

  • Antworten:6
Dudi Dude
  • Forum-Beiträge: 3

29.05.2014, 02:36:13 via Website

Hallo Leute,

ich habe eine Activity MainActivity mit 2 Fragments "FileListFragment" und "PlayListFragment"

und einen button mit dem ich zwischen den 2 fragments hin und her switchen moechte.

dazu benoetige ich eine Art globale Variable, um bei OnClick feststellen zu koennen, ob Playlist oder Filelist gerade angezeigt wird. Aber das gelingt mir nicht :/

hier ist das CodeSnippet:

switchButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                if (MainActivity.this.isPlaylistView) {
                    FileListFragment newFragment = new FileListFragment();
                    transaction.replace(R.id.switchbox, newFragment);
                } else {
                    PlayListFragment newFragment = new PlayListFragment();
                    transaction.replace(R.id.switchbox, newFragment);
                    MainActivity.this.isPlaylistView = true;

                }
                transaction.addToBackStack(null);
                transaction.commit();
            }
        });

das is mein Versuch, aber isPlaylistView kann nicht beschrieben werden aus der Closure heraus.

Habt ihr eine Idee ?

Gruss

Adrian

— geändert am 29.05.2014, 02:38:35

Antworten
Georg C.
  • Forum-Beiträge: 235

29.05.2014, 06:41:34 via Website

Hi,
globale Variablen sind "Böse"!
Wieso machst Du es nicht ganz einfach so:

private volatile boolean switch_Flag = false;

...

if (switch_Flag) {
         FileListFragment newFragment = new FileListFragment();
         transaction.replace(R.id.switchbox, newFragment);
                 } else {
                    PlayListFragment newFragment = new PlayListFragment();
                    transaction.replace(R.id.switchbox, newFragment);
                    switch_Flag = true;
                         }

...

Aber Vorsicht, "Arbeit" mit boolschen- Flag´s kann "Überraschungen" mit sich bringen.

LG
Georg

— geändert am 29.05.2014, 06:50:41

Sorry für Gramatik & Stilistik Fehler.

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

29.05.2014, 07:57:46 via Website

Als alternative kannst du auch die ID der ( public void onClick(View view))View auswerten

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

Antworten
Georg C.
  • Forum-Beiträge: 235

29.05.2014, 09:14:56 via Website

Hallo,
die Erfahrener Android- aner haben immer bessere Lösungen. :)
(Man lernt nie aus!)
ABER!

Der Adrian generiert sich selber "Einen Fehler", was weitere Fragen generieren können ...und .. und ... und.
Vom Syntax ist zwar alles korrekt, aber NICHT .... aus der Wartbarkeit Perspektive .... Konventionen!
Beide Objekte (FileList wie auch PlayList) haben nicht nur die selben ID- Namen, aber tragen sogar die gleichen Deklarationsnamen! .... absolutes NO GO! bzw. ist so was ein Paradenbeispiel für Fehlerquellen ....
...

LG
Georg

— geändert am 29.05.2014, 09:19:43

Sorry für Gramatik & Stilistik Fehler.

Antworten
Andreas S.
  • Forum-Beiträge: 76

29.05.2014, 09:31:16 via App

Die Methode replace des FragmentManagers kann als drittes Argument einen Tag annehmen.

In den Fragmenten kannst du in der Methode onAttach den Tag setzen (Variable in der MainActivity)

Dadurch kannst du dann entscheiden welches Fragment instanziert bzw angezeigt werden soll

— geändert am 29.05.2014, 09:34:01

Antworten
Dudi Dude
  • Forum-Beiträge: 3

29.05.2014, 12:09:20 via Website

gute Idee, aber ich habe ja einen Button, der beide Fragments switcht, insofern wird die ID immer gleich sein, oder?

Antworten
Dudi Dude
  • Forum-Beiträge: 3

29.05.2014, 12:10:21 via Website

Danke hat geklappt :D

ich bin halt kein Java-, aber ein Android Anfänger. Manche Dinge können anfangs eben etwas verwirren ...

Antworten