工具栏 setNavigationOnClickListener 不起作用/被忽略
Toolbar setNavigationOnClickListener doesnt work / gets ignored
在我的应用程序中,有一个 activity 需要在点击导航时关闭。过去,下面的代码可以正常工作,但是,由于新的 Android 更改,它不再工作了。
是否有调用导航图标点击的新方法?我有什么遗漏吗?
ActivitySettings.kt
class ActivitySettings : AppCompatActivity() {
private lateinit var binder: ActivitySettingsBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binder = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(R.layout.activity_settings)
binder.topToolbarBack.setNavigationOnClickListener {
finish()
}
}
}
activity_settings.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/topToolbarBack"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:navigationIconTint="@color/white_material"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navigationIcon="@drawable/ic_outline_arrow_back_24"
app:popupTheme="@style/popupMenuThemeDark"
app:title="@string/currentScreenSettings"
app:titleTextColor="@color/white_material" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvSettings"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/topToolbarBack" />
</androidx.constraintlayout.widget.ConstraintLayout>
请确保在为工具栏设置点击侦听器之前调用 setSupportActionBar(binder.topToolbarBack)
此问题是由调用布局的方式引起的。
binder
可以认为是“二次布局”。由于在那activity,我设置为ContenteView R.layout.activity_settings
,仍然可以从布局中获取元素的活页夹基本上被当前设置的布局覆盖。
如果您想使用 binder
,您必须在 setContentView()
binder.root
中进行设置,这会加载您需要的正确布局。
所以,固定的代码是:
class ActivitySettings : AppCompatActivity() {
private lateinit var binder: ActivitySettingsBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binder = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(binder.root)
binder.topToolbarBack.setNavigationOnClickListener {
finish()
}
}
}
在我的应用程序中,有一个 activity 需要在点击导航时关闭。过去,下面的代码可以正常工作,但是,由于新的 Android 更改,它不再工作了。
是否有调用导航图标点击的新方法?我有什么遗漏吗?
ActivitySettings.kt
class ActivitySettings : AppCompatActivity() {
private lateinit var binder: ActivitySettingsBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binder = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(R.layout.activity_settings)
binder.topToolbarBack.setNavigationOnClickListener {
finish()
}
}
}
activity_settings.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/topToolbarBack"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:navigationIconTint="@color/white_material"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navigationIcon="@drawable/ic_outline_arrow_back_24"
app:popupTheme="@style/popupMenuThemeDark"
app:title="@string/currentScreenSettings"
app:titleTextColor="@color/white_material" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvSettings"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/topToolbarBack" />
</androidx.constraintlayout.widget.ConstraintLayout>
请确保在为工具栏设置点击侦听器之前调用 setSupportActionBar(binder.topToolbarBack)
此问题是由调用布局的方式引起的。
binder
可以认为是“二次布局”。由于在那activity,我设置为ContenteView R.layout.activity_settings
,仍然可以从布局中获取元素的活页夹基本上被当前设置的布局覆盖。
如果您想使用 binder
,您必须在 setContentView()
binder.root
中进行设置,这会加载您需要的正确布局。
所以,固定的代码是:
class ActivitySettings : AppCompatActivity() {
private lateinit var binder: ActivitySettingsBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binder = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(binder.root)
binder.topToolbarBack.setNavigationOnClickListener {
finish()
}
}
}