Android fragments 原因:java.lang.IllegalStateException:surface\u视图不能为空?

Android fragments 原因:java.lang.IllegalStateException:surface\u视图不能为空?,android-fragments,android-activity,kotlin,Android Fragments,Android Activity,Kotlin,我正在我的应用程序中试用。我有一个活动,在那里我嵌入了一个表面折射。此处为碎片曲面布局: 在我的活动中,我称之为: val fragmentManager = this.supportFragmentManager val fragmentTransaction = fragmentManager.beginTransaction() fragmentTransaction.replace(R.id.framelayout_qr, SurfaceFragment()) fragmentTrans

我正在我的应用程序中试用。我有一个活动,在那里我嵌入了一个表面折射。此处为碎片曲面布局:

在我的活动中,我称之为:

val fragmentManager = this.supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.framelayout_qr, SurfaceFragment())
fragmentTransaction.commit()
在我的活动布局中:

<FrameLayout
        android:id="@+id/framelayout_qr"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
/>

稍后,我必须从我的活动访问surface_视图,但这会崩溃:

由以下原因引起:java.lang.IllegalStateException:surface\u视图不能为空 空的

问题1:所有my R都标记为红色,并标记为未解析引用:R,尽管它们是在代码中导入的。但我可以运行应用程序,直到崩溃。为什么标有红色,但明显是进口的


问题2:我已经读到我不再需要Kotlin中的findViewById()东西了?为什么活动中的surface_view为空,尽管它在FragmentTransaction中被替换?

Q1:R是对“构建”应用程序时生成的资源集的引用。第一次它不存在,随后它就会存在。每次“清理”应用程序时,都会重置此设置。按“重建”将首先运行一个清理,然后运行一个构建。虽然这是Android资源系统的设计方式,但Android Studio inspection在第一次检查时还不够聪明,因此它错误地认为您会遇到编译时错误。如果这种情况仍然存在,请尝试在Android Studio中禁用缓存,执行梯度同步,然后重建项目

问题2:是近几年推出的一项功能,它避免了使用
findViewById(…)
访问视图和小部件。您只能从中使用的Kotlin文件中访问xml文件中声明的视图和小部件

val fragmentManager = this.supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.framelayout_qr, SurfaceFragment())
fragmentTransaction.commit()
<FrameLayout
        android:id="@+id/framelayout_qr"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
/>