Reagieren,-Muttersprachler innerhalb eines Fragments
Wie zu Beginn reagieren,-Muttersprachler innerhalb eines fragments?
Während der Umsetzung reagieren,-Muttersprachler im inneren-Fragment, onCreateView Funktion nicht zurück Blick von mReactRootView.
View view = inflater.inflate(mReactRootView. , container, false);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich es geschafft, um dies herauszufinden, mit viel Versuch und Irrtum. Ich habe gesehen, diese Frage rund um das internet und dachte, dies war der beste Ort zum posten der Antwort. Hier ist, wie zu tun, mit der neuesten version von Reagieren (0.29 schreiben):
Das erste, was wir tun werden ist, erstellen Sie eine abstrakte
ReactFragment
Klasse, dass wir während unserer app:Werden wir jetzt in der Lage sein zu erstellen, die Fragmente, die render Reagieren Nativen Komponenten, z.B.:
Ein wenig mehr Arbeit erforderlich ist, obwohl. Unsere Eltern
Activity
muss, passieren einige Dinge in derReactInstanceManager
damit Reagieren die Einheimischen lifecycle, um richtig zu arbeiten. Hier ist, was ich endete mit:Schließlich, Sie werden bemerken, dass der Verweis auf
(MyApplication)
ganzen code; dies ist eine GlobaleApplication
Objekt enthalten unsereReactInstanceManager
, auch bekannt als die Brücke zwischen Android und Reagieren Nativen. Dies ist das Muster, das React Native-Projekte verwenden, die intern, also habe ich einfach kopiert. Hier ist, wie es umgesetzt:Schwierigste bit war, herauszufinden, den Lebenszyklus zwischen dem Fragment und der Tätigkeit; die
ReactRootView
benötigt einen Verweis auf die Aktivität Kontext, in Reihenfolge zum instanziieren, so dass Sie sicher, dassgetActivity()
würde nicht null sein war wichtig. Auch die Registrierung deronHostPause()
undonHostResume()
in der übergeordneten Aktivität wurde unintuitiv auf den ersten, aber letztlich erwies sich als einfacher, wenn dieReactNativeInstanceManager
wurde abstrahiert in eine Globale, anstatt halten Sie auf die Aktivität oder Fragment.Hoffe, dies hilft jemand da draußen!
ReactActivity
oder versuchen Sie es in einer app erstellt, mitreact-native init
?onResume(){...mReactInstanceManager.onHostResume(getActivity(), (DefaultHardwareBackBtnHandler) getActivity());}
Gibt es Bibliotheken zur Verfügung, die übernehmen das für Sie.
Eine, die ich benutze ist reagieren-native-android-fragment
Gemäß den Anweisungen auf der verlinkten GitHub-repository:
compile 'com.github.hudl:react-native-android-fragment:v0.43.2'
.z.B.
Bauen Sie reagieren-code in das fragment
Fragment reactFragment = new ReactFragment.Builder()
.setComponentName("HelloWorld")
.setLaunchOptions(launchOptions) //A Bundle of launch options
.build();
Stelle das Fragment in ein FrameLayout, die Sie haben würden, in Ihrer XML-layout-Datei. In meinem Fall, das FrameLayout-ID ist react_holder.
getSupportFragmentManager()
.beginTransaction()
.add(R.id.react_holder, reactFragment)
.commit();