首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制关闭“致命异常”& "findViewById(com.google.…aterial.R.id.coordinator)不能为空“Kotlin

强制关闭“致命异常”& "findViewById(com.google.…aterial.R.id.coordinator)不能为空“Kotlin
EN

Stack Overflow用户
提问于 2022-02-04 19:28:08
回答 1查看 350关注 0票数 0

我尝试从底部栏打开新的活动,但是我的应用程序第一次打开它时会强制关闭,这是我得到的错误信息。

请有人帮帮我,谢谢你的帮助。

错误码

E/AndroidRuntime:致命异常:主进程: com.apps.test.fx,PID: 24187 java.lang.RuntimeException:无法启动活动com.apps.test.fx

java.lang.NullPointerException: findViewById(com.google.…)aterial.R.id.coordinator)不能为空

Kotlin码

代码语言:javascript
复制
private lateinit var chipNavigationBar: ChipNavigationBar
private lateinit var constraint: CoordinatorLayout


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_dashboard)


    val window = window
    window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN
    constraint = findViewById(com.google.android.material.R.id.coordinator)

    chipNavigationBar = findViewById(R.id.chip_app_bar)
    chipNavigationBar.setItemSelected(R.id.home, true)
    supportFragmentManager.beginTransaction().replace(R.id.root_layout, home_fragment()).commit()

    constraint.setBackgroundColor(getColor(R.color.dk_purple))

    bottom_menu()}

    private fun bottom_menu() {
        chipNavigationBar.setOnItemSelectedListener({
            when(it){
                R.id.home ->{
                    constraint.setBackgroundColor(getColor(R.color.dk_purple))
                    supportFragmentManager.beginTransaction().replace(R.id.root_layout, home_fragment()).commit()
                }

                R.id.promo ->{
                    constraint.setBackgroundColor(getColor(R.color.sft_purple))
                    supportFragmentManager.beginTransaction().replace(R.id.root_layout, home_fragment()).commit()

                }

            }
        })
    }

fun floating_button(view: View){
    constraint.setBackgroundColor(getColor(R.color.purple_500))
    supportFragmentManager.beginTransaction().replace(R.id.root_layout, home_fragment()).commit()

    chipNavigationBar.setItemSelected(R.id.home, true)

    val int = Intent(this, floating_action::class.java)
    startActivity(int)
}

XMLCode

代码语言:javascript
复制
<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:onClick="floating_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:maxImageSize="30dp"
    android:layout_marginBottom="40dp"
    android:backgroundTint="@color/white"
    app:layout_anchor="@id/bottom_app_bar"
    android:src="@drawable/ic_category" />

<com.google.android.material.bottomappbar.BottomAppBar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/bottom_app_bar"
    android:layout_gravity="bottom"
    android:backgroundTint="@color/dk_green"
    style="@style/Widget.MaterialComponents.BottomNavigationView.Colored"
    app:fabCradleMargin="6dp"
    app:fabAlignmentMode="center"
    app:fabCradleRoundedCornerRadius="50dp">

    <com.ismaeldivita.chipnavigation.ChipNavigationBar
        android:id="@+id/chip_app_bar"
        android:layout_gravity="fill_horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:padding="10dp"
        app:cnb_iconSize="30dp"
        android:layout_marginEnd="16dp"
        app:cnb_menuResource="@menu/item_menu"
        app:cnb_unselectedColor="@color/white" />

</com.google.android.material.bottomappbar.BottomAppBar>
EN

回答 1

Stack Overflow用户

发布于 2022-02-04 20:45:50

下面是您的堆栈跟踪中的错误(每个错误都是由下面的一个错误引起的,所以最后一个错误是问题的根源):

代码语言:javascript
复制
Caused by: java.lang.NullPointerException: findViewById(com.google.…aterial.R.id.coordinator) must not be null

据说,当findViewById调用不被允许为空时,它将返回null。这是不允许的,因为您将它分配给constraint,它被定义为非空类型:

代码语言:javascript
复制
private lateinit var constraint: CoordinatorLayout

如果允许null,则为ConstraintLayout?。如果在您正在进行查找的视图层次结构中找不到具有所提供ID的视图,则findViewById返回null,即在setContentView中膨胀的活动布局。

因此,R.layout.activity_dashboard没有ID为com.google.android.material.R.id.coordinatorCoordinatorLayout (或任何View)。看看您的XML,这是真的!所以你需要加一个:

代码语言:javascript
复制
    <androidx.coordinatorlayout.widget.CoordinatorLayout
            android:id="@+id/coordinator"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintBottom_toBottomOf="parent">

这为您提供了一个R.id.coordinator的资源ID。您正在创建的任何布局都应该在R.id.命名空间中有ID,而不是android.anything.else.

代码语言:javascript
复制
constraint = findViewById(R.id.coordinator)

如果您使用的是系统提供的布局,比如android.R.id... (或其他什么),或者像标准的应用程序栏这样的组件(其中主按钮有android.R.id. ID),那么您才需要访问android.R.id.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70991898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档