2016-04-18 9 views
2

In meiner benutzerdefinierten Ansicht habe ich eine Java-Klasse, die ein einfaches Spiel ausführt. Wenn das Spiel beendet ist, möchte ich meine DialogFragment anzeigen, aber die getFragmentManager() Methode scheint nicht definiert zu sein.Zugriff auf FragmentManager in einer benutzerdefinierten Ansichtsklasse

FragmentManager manager = getFragmentManager(); 
Finish finish = new Finish(); 
finish.show(manager, "done"); 

Ich habe versucht, den Manager durch eine Fragment obj bekommen wie:

Fragment fragment = new Fragment(); 
FragmentManager manager = fragment.getFragmentManager(); 

Aber das kehrt als null. Ich weiß, es ist eine neue Instanz, aber ich bin mir nicht sicher, welchen Wert es geben soll. Jede Hilfe würde sehr geschätzt werden.

+1

Ihre 'Ansicht' sollte nicht direkt mit' FragmentManager' interagieren. Erstellen Sie stattdessen eine Schnittstelle, die Ihre 'Activity' implementieren kann, wodurch Ihre' View' signalisieren kann, dass das Spiel fertig ist, und die 'FragmentTransaction' in der Interface-Methode' Activity'. –

+0

So etwas wie eine statische Methode in der Elternansicht, und rufen Sie es an, um das Spiel zu signalisieren, ist beendet (und mit meinem Fragment dort fortfahren)? – Brian

+0

Nein. Sie können nicht von einer statischen Methode auf den 'FragmentManager' zugreifen, ohne dass ein wackeliges Parameter-Relaying erfolgt. Verwenden Sie eine 'Schnittstelle'. –

Antwort

4

, wenn Ihr Blick auf eine Activity dann angebracht ist, einfach können Sie tun

((Activity)getContext()).getFragmentManager(); 

oder

((ActivityCompat)getContext()).getSupportFragmentManager(); 

und sicherer stellen Sie Sie bitte gegen überprüfen, um von der View Context Instanz von einem Activity indem man so vorgeht:

if(getContext() instanceof Activity)// do something 

und eine bessere Lösung ist, hatte ich auf einen Rückruf zwischen dem View und dem Activity verlassen.

+0

Jetzt ist es '((AppCompatActivity) getContext()). GetSupportFragmentManager()'. – CoolMind

Verwandte Themen