J'utilise Jetpack Navigation pour gérer la navigation pour les fragments.
J'ai suivi la documentation et installé les composants requis, mais l'application se bloque juste en essayant d'afficher l'activité hébergeant le fragment NavHost
Exception:
Java.lang.IllegalArgumentException: Fragment NavHostFragment{820022f} is not an active fragment of FragmentManager FragmentManager{5a5703c in HostCallbacks{a0b41c5}}
at Android.support.v4.app.FragmentManagerImpl.setPrimaryNavigationFragment(FragmentManager.Java:3389)
at Android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.Java:783)
at Android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.Java:2595)
at Android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.Java:2382)
at Android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.Java:2337)
at Android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.Java:2244)
Présentation de l'activité principale
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/container"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".LoginActivity" >
<fragment
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:id="@+id/my_nav_Host_fragment"
Android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/nav_graph"
app:defaultNavHost="true"
/>
</FrameLayout>
Activité principale - Kotlin
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.login_activity)
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.container, LoginFragment.newInstance())
.commitNow()
}
}
override fun onSupportNavigateUp()
= findNavController(R.id.my_nav_Host_fragment).navigateUp()
}
J'essaie de tester les fonctionnalités de JetPack, et je suis actuellement bloqué sur celui-ci, tout le monde a une idée de ce qui pourrait mal se passer? Est-ce dû au fait que Android 3.2 soit encore en avant-première? Toute aide serait très appréciée..
Résolu.
Le problème provenait de l'appel au composant FragmentManager de remplacer son contenu par une nouvelle instance de LoginFragment. Le fait de supprimer le code suivant de la méthode onCreate l'a résolu
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.container, LoginFragment.newInstance())
.commitNow()
}
Explication supplémentaire puisque cela m'a fait me gratter la tête pendant quelques minutes:
Vous pouvez créer NavHostFragment par programme en utilisant ce code à partir du message de l'OP et répondre ou vous pouvez mettre app:defaultNavHost="true"
dans le fragment de votre activité principale.
Android Studio crée de ces deux manières lorsque vous créez des fichiers de raccord. Si vous supprimez le code de OP ou cette propriété, cela fonctionnera.