onPostCreate in einer anderer Klasse auslagern

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

06.05.2014, 18:17:06 via Website

Hallo,
ich habe einen NavigationDrawer mit der SupportV4 Lib erstellt.
Nun will ich, dass immer der gleiche Drawer in allen Activities angezeigt wir.
Also habe ich die Drawerfunnktionen in eine Klasse ausgelagert.
Das Problem ist, dass ich nun onPostCreate und onConfigurationChanged auch benutzen will,
was kann ich tun, damit die funktionen trotz externer Klasse ausgeführt werden.

Zueätzlich ist es das problen dass ich aus der externen klasse nicht auf die Activity Superclass zugreifen kann, diese wird in der Funtion benötigt:

    protected void onPostCreate(Bundle savedInstanceState) {

 super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }

— geändert am 06.05.2014, 18:26:41

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

Antworten
impjor
  • Forum-Beiträge: 1.793

06.05.2014, 22:09:46 via App

Du könntest ein Interface deklarieren:
interface MyDrawer {
void setActivity(Activity a);
void onPostCreate();
....
}

Jede Activity hat dann eine Instanz:
MyDrawer drawer;

onCreate(Bundle b){ 
drawer = new MyNavigationDrawerDerMyDrawerImplementiert();
drawer.setActivity(this);
}

...

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

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

07.05.2014, 05:06:03 via App

Danke
Bisher habe ich die klasse ihne Interface gestaltet.
Brauche ich dieses überhaupt, denn ich übergebe mein Activty Objekt im konstruktor der Klasse d.h. es ist immer ein sooches objekt enthalten.
Aber wie schaffe ich es jetzt dass die beiden Funktionen dort aufgerufen werden?
Müsste ich die Funktionen durchreichen also in jeder Activity eine onPostCreate Funktion erstellen und von dort dann die Funktion aus der Nav Drawer Klasse aufrufen?
LG Pascal

— geändert am 07.05.2014, 05:08:15

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

Antworten
Fabian Simon
  • Forum-Beiträge: 359

07.05.2014, 11:57:43 via Website

Hi,
wenn ich dich richtig verstanden habe, müsste doch über eine Gemeinsame Vater Klasse dies möglich sein.

Wenn du diese abstractierst, kannst du über das porlimorphie (oder wie das geschrieben wird) Gesetzt dies in den Erbenden Klassen implementieren.

Gruß
Fabian

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

07.05.2014, 13:36:13 via App

Das bringt mir doch nix wenn das eine ne Activiy ist und das andere eine normape Klasse die von Object erbt.
Aber wofür ich das Brauche:
Mein Navigation Drawer ist standartmäßig geschlossen und über den HomeUp button der Action Bar soll dieser geöffnet werden.
ich benutze den NavDrawer der support lib v4.
Und ich nehme an dass das die beiden oben genannten funktionen dafür sorgen dass ich den NavDrawer über den Button öffnet und schliessen kann.

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

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

13.05.2014, 06:46:06 via App

Habe es jetzt gelöst.
Etzt fehlt mir nurnoch dass sich der Drawer öffnet, wenn man auf das Home Symbol der ActionBar clickt.
Wie bekomme ich das hin bzw. sollte das nicht standartmäßig dabei sein?

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

Antworten
Fabian Simon
  • Forum-Beiträge: 359

14.05.2014, 09:23:53 via Website

Noch als ergänung dies wäre doch ein Optimales Anwendungsbeispielt für das Entwurfsmuster Delegate

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

14.05.2014, 13:36:37 via Website

Habe garkein Delegate, ich will eigentlich nur wissen wie ich den Drawer beim click auf den ActionBar öffne
Die eigentliche Steuerung ist eine einfache Klasse, die ich in jeder Activity mit new Instantiere.

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

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

31.05.2014, 23:49:05 via Website

Also, wenn man keine Fragments benutzt, muss man das öffnen Event in jeder Activity in der onOptionsItemSelected festlgen.
Das sieht dann ungefär so aus:

 @Override
public boolean onOptionsItemSelected(MenuItem item) {

    if (side.mDrawerToggle.onOptionsItemSelected(item)) { //Side ist eine Instanz meiner NavigationDrawer kasse
          return true;
        }

      return false;
}

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

Antworten