【问题标题】:ViewTreeLifecycleOwner not found from DecorView@2da7146[MyActivity]从 DecorView@2da7146[MyActivity] 找不到 ViewTreeLifecycleOwner
【发布时间】:2021-05-28 15:19:28
【问题描述】:

从 compose alpha-11 更新到 alpha-12(或 beta-01)后,每当我打开具有 compose 视图的 Activity 或 Fragment 时,我都会遇到此崩溃。

我正在使用实现LifecycleOwnerAppCompatActivity,所以这非常奇怪。

    java.lang.IllegalStateException: ViewTreeLifecycleOwner not found from DecorView@2da7146[MyActivity]
            at androidx.compose.ui.platform.WindowRecomposer_androidKt.createLifecycleAwareViewTreeRecomposer(WindowRecomposer.android.kt:214)
            at androidx.compose.ui.platform.WindowRecomposer_androidKt.access$createLifecycleAwareViewTreeRecomposer(WindowRecomposer.android.kt:1)
            at androidx.compose.ui.platform.WindowRecomposerFactory$Companion$LifecycleAware$1.createRecomposer(WindowRecomposer.android.kt:98)
            at androidx.compose.ui.platform.WindowRecomposerPolicy.createAndInstallWindowRecomposer$ui_release(WindowRecomposer.android.kt:151)
            at androidx.compose.ui.platform.WindowRecomposer_androidKt.getWindowRecomposer(WindowRecomposer.android.kt:199)
            at androidx.compose.ui.platform.AbstractComposeView.ensureCompositionCreated(ComposeView.android.kt:176)
            at androidx.compose.ui.platform.AbstractComposeView.onAttachedToWindow(ComposeView.android.kt:207)
            at android.view.View.dispatchAttachedToWindow(View.java:20014)
            at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3589)
            at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3596)
            at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3596)
            at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3596)
            at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3596)
            at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3596)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2223)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1888)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8511)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
            at android.view.Choreographer.doCallbacks(Choreographer.java:761)
            at android.view.Choreographer.doFrame(Choreographer.java:696)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
            at android.os.Handler.handleCallback(Handler.java:873)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:214)
            at android.app.ActivityThread.main(ActivityThread.java:7050)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)

我的代码看起来很简单:

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

更新

显然你需要使用androidx.appcompat:appcompat:1.3.0-beta01

【问题讨论】:

  • 显然你需要使用androidx.appcompat:appcompat:1.3.0-beta01
  • 我对@9​​87654330@ 仍然有同样的问题。更新到版本 1.3.0-beta01 没有帮助。你知道问题出在哪里吗?
  • @Ibasek 可能与这个错误有关issuetracker.google.com/issues/180691023
  • @ClapaLucian 解决方案对我有用。基本上将implementation "androidx.fragment:fragment-ktx:1.4.0-SNAPSHOT" 添加到您的模块build.gradle 并将maven { url 'https://androidx.dev/snapshots/builds/7166224/artifacts/repository' } 添加到存储库列表中

标签: android kotlin android-activity android-view android-jetpack-compose


【解决方案1】:

尝试将AppCompat的依赖更新为rc01版本。 这解决了我的问题。

implementation 'androidx.appcompat:appcompat:1.3.0-rc01'

【讨论】:

    【解决方案2】:

    BottomSheetDialogFragment 我也遇到了同样的问题 您必须将fragment 升级到1.3.1

    感谢@clapa-lucian,您可以在此issue 中找到更多信息

    【讨论】:

      【解决方案3】:

      AppCompatActivity 切换到FragmentActivity 解决了我的问题。

      【讨论】:

      • 在尝试了许多不同的建议后,这对我有用。我希望我能给你更多向上箭头。谢谢。
      【解决方案4】:

      由于没有一个解决方案对我有用,我来这里是为了让你的一天更轻松(假设你有我为我的项目所拥有的配置)。

      所以,这是升级到beta01 后没有启动的活动:

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

      如您所见,这里没有setContentView(...)。在分析堆栈跟踪后,我看到 setTag(R.id.view_tree_lifecycle_owner, lifecycleOwner) 没有被执行,这导致 getTag() 返回 null - 因此异常。

      当任何setContentView() 重载被执行时,setTag(...) 被调用。

      因此,我的设置的简单解决方法是引入一个冗余的 setContentView(View(this)),它会在内部设置生命周期所有者:

      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()
          }
      }
      

      【讨论】:

        【解决方案5】:

        androidx.appcompat:appcompat1.2.0 升级到1.3.1 为我解决了这个问题。

        TLDR: 更新

        implementation "androidx.appcompat:appcompat:1.2.0"
        

        implementation "androidx.appcompat:appcompat:1.3.1"
        

        【讨论】:

          【解决方案6】:

          对我来说,这是因为我没有包含 appcompat 库,并且我的活动继承自 Activity 而不是 AppCompatActivity。问题通过添加库解决:

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

          以及AppCompatActivity的子类化:

          class MyActivity: AppCompatActivity() {
            ...
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-09-24
            • 2021-06-01
            • 2021-10-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多