Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从中找不到ViewTreeLifecycleOwnerDecorView@2da7146[我的活动]_Android_Kotlin_Android Activity_Android View_Android Jetpack Compose - Fatal编程技术网

Android 从中找不到ViewTreeLifecycleOwnerDecorView@2da7146[我的活动]

Android 从中找不到ViewTreeLifecycleOwnerDecorView@2da7146[我的活动],android,kotlin,android-activity,android-view,android-jetpack-compose,Android,Kotlin,Android Activity,Android View,Android Jetpack Compose,从composealpha-11更新到alpha-12(或beta-01)后,每当我打开具有compose视图的活动或片段时,就会发生此崩溃 我使用的是AppCompatActivity,它实现了LifecycleOwner,所以这非常奇怪 java.lang.IllegalStateException: ViewTreeLifecycleOwner not found from DecorView@2da7146[MyActivity] at androidx.

从compose
alpha-11
更新到
alpha-12
(或
beta-01
)后,每当我打开具有compose视图的活动或片段时,就会发生此崩溃

我使用的是
AppCompatActivity
,它实现了
LifecycleOwner
,所以这非常奇怪

    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

因为没有一个解决方案对我有效,我来这里是为了让您的一天变得更轻松(假设您拥有我为我的项目提供的配置)

因此,以下是升级到
beta01
后未启动的活动:

class AuthenticationActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        supportFragmentManager.beginTransaction()
            .replace(android.R.id.content, SignInFragment())
            .commit()
    }
}
如您所见,这里没有
setContentView(…)
。在分析stacktrace之后,我看到
setTag(R.id.view\u tree\u lifecycle\u 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()
    }
}
class AuthenticationActivity:AppCompatActivity(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)

setContentView(查看(此))/我在
BottomSheetDialogFragment
您必须将
fragment
升级到


多亏了@clapa lucian,您可以在这里找到更多关于从
AppCompatActivity
切换到
FragmentActivity
的信息,解决了我的问题。

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


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

显然您需要使用androidx.appcompat:appcompat:1.3.0-beta01I与
BottomSheetDialogFragment
仍然存在相同的问题。更新到1.3.0-beta01版本没有帮助。您知道问题所在吗?@Ibasek可能与此bug@ClapaLucian有关解决方案对我有效。基本上是将
实现“androidx.fragment:fragment ktx:1.4.0-SNAPSHOT”
添加到您的模块
build.gradle
并添加
maven{url'https://androidx.dev/snapshots/builds/7166224/artifacts/repository' }
这对我来说很有效,我尝试了很多不同的建议。我希望我能给你更多的建议。谢谢。