我尝试从底部栏打开新的活动,但是我的应用程序第一次打开它时会强制关闭,这是我得到的错误信息。
请有人帮帮我,谢谢你的帮助。
错误码
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码
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
<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>发布于 2022-02-04 20:45:50
下面是您的堆栈跟踪中的错误(每个错误都是由下面的一个错误引起的,所以最后一个错误是问题的根源):
Caused by: java.lang.NullPointerException: findViewById(com.google.…aterial.R.id.coordinator) must not be null据说,当findViewById调用不被允许为空时,它将返回null。这是不允许的,因为您将它分配给constraint,它被定义为非空类型:
private lateinit var constraint: CoordinatorLayout如果允许null,则为ConstraintLayout?。如果在您正在进行查找的视图层次结构中找不到具有所提供ID的视图,则findViewById返回null,即在setContentView中膨胀的活动布局。
因此,R.layout.activity_dashboard没有ID为com.google.android.material.R.id.coordinator的CoordinatorLayout (或任何View)。看看您的XML,这是真的!所以你需要加一个:
<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.
constraint = findViewById(R.id.coordinator)如果您使用的是系统提供的布局,比如android.R.id... (或其他什么),或者像标准的应用程序栏这样的组件(其中主按钮有android.R.id. ID),那么您才需要访问android.R.id.。
https://stackoverflow.com/questions/70991898
复制相似问题