32
votes

ViewTreeFecCycleOner non trouvé à partir de décorview @ 2da7146 [myActivity]

Après la mise à jour de Compose alpha-11 vers alpha-12 (ou bêta-01 ), je reçois ce crash chaque fois que j'ouvre un Activité ou fragment qui a des vues composées.

J'utilise AppCompatActivity qui implémente LifeCycleOner , c'est donc extrêmement étrange. >

mon code semble vraiment simple:

    class MyActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
    
            setContent {
                MaterialTheme {
                    Text(text = "compose")
                }
            }
        }
    }

update

, apparemment, vous devez utiliser AndroidX. AppCompat: AppCompat: 1.3.0-beta01


4 commentaires

Apparemment, vous devez utiliser AndroidX.AppCOMPAT: AppCompat: 1.3.0-Beta01


J'ai toujours le même problème avec BottomSheetDialogFragment . La mise à jour de la version 1.3.0-beta01 n'a pas aidé. Savez-vous où se trouve le problème?


@Ibasek est probablement lié à ce bug isetracker.google.com/issues/180691023


@Clapalucian Solution a fonctionné pour moi. Ajout d'implémentation "AndroidX.Fragment: Fragment-KTX: 1.4.0-snapshot" à votre module build.gradle et ajouter maven {url 'https: / /Androidx.dev/snapshots/builds/7166224/artifacts/rep‌ opostory '} à la liste des référentiels


6 Réponses :


2
votes

Comme aucune des solutions n'a fonctionné pour moi, je suis ici pour vous faciliter la journée (en supposant que vous avez la configuration que j'avais pour mon projet).

Donc, voici l'activité qui ne soit pas lancée après Mise à niveau vers beta01 :

class AuthenticationActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(View(this)) // <-- here's the newly introduced line
        supportFragmentManager.beginTransaction()
            .replace(android.R.id.content, SignInFragment())
            .commit()
    }
}

Comme vous pouvez le voir, il n'y a pas setContentView (...) ici. Après avoir analysé le StackTrace, j'ai vu que settrag (r.id.view_tree_lifecycle_owner, lifecycleowner) n'a pas été exécuté, ce qui a donné getTag () pour renvoyer null - d'où l'exception.

s'avère settrag (...) s'appelle lorsqu'une setContentView () Les surcharges sont effectuées.

Ainsi, Le correctif facile pour ma configuration consistait à introduire un SetContentView redondant (voir (this)) qui définirait en interne le propriétaire du cycle de vie:

class AuthenticationActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        supportFragmentManager.beginTransaction()
            .replace(android.R.id.content, SignInFragment())
            .commit()
    }
}


0 commentaires

3
votes

J'ai rencontré le même problème avec BottomSheetDialogFragment Vous devez mettre à niveau Fragment à 1.3.1

Grâce à @ Clapa-Lucian, vous pouvez en trouver plus dans ce problème


0 commentaires

3
votes

Passer de AppCompatActivity à fragmentActivity a résolu ce problème dans mon cas.


1 commentaires

Cela a fonctionné pour moi après avoir essayé de nombreuses suggestions différentes. J'aimerais pouvoir vous donner plus de flèches. Merci.



16
votes

Essayez de mettre à jour la dépendance de la version appcompat vers rc01 . Cela a résolu le problème pour moi.

Implémentation 'AndroidX.AppCompat: AppCompat: 1.3.0-RC01'


0 commentaires

3
votes

Mise à niveau AndroidX.AppCompat: AppCompat depuis 1.2.0 à 1.3.1 Résolution du problème pour moi.

TLDR: Mise à jour

implementation "androidx.appcompat:appcompat:1.3.1"


0 commentaires

0
votes

Pour moi, c'était parce que je n'avais pas inclus la bibliothèque AppCompat et mon activité héritée de activité au lieu de appcompatativité . Le problème résolu en ajoutant la bibliothèque:

class MyActivity: AppCompatActivity() {
  ...
}

et sous-classé à partir de AppCompatActivity :

implementation("androidx.appcompat:appcompat:1.3.0")


0 commentaires