#android #android-toolbar
#Android #android-панель инструментов
Вопрос:
В моем приложении есть действие, которое необходимо закрыть при нажатии на навигацию. В прошлом приведенный ниже код работал отлично, однако с новыми изменениями 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>
Комментарии:
1.
lifecycleowner
кажется, не существует, получая неразрешенную ссылку2. Просто прочтите то, что вы прислали, и для того, что мне нужно сделать, мне действительно это не нужно. Это просто панель инструментов, зачем мне использовать макет привязки данных, когда мне просто нужно связующее для самой панели инструментов?
3. Вы
RecyclerView
закрываете свою панель инструментов. Вам нужно ограничитьRecyclerView
, чтобы быть нижеToolbar
, чтобыRecyclerView
не красть события касания.4. @NikolaDespotoski это не так, recyclerview находится соответственно под панелью инструментов. Он не покрывает панель инструментов.
Ответ №1:
пожалуйста, убедитесь, что вы звоните setSupportActionBar(binder.topToolbarBack)
, прежде чем устанавливать прослушиватель щелчков для панели инструментов
Комментарии:
1. Я только что попробовал, и это не сработало. Я нашел решение, позвольте мне записать его
Ответ №2:
Эта проблема вызвана тем, как вызывались макеты.
binder
можно считать «вторичным макетом». Поскольку в этом действии я установил как 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()
}
}
}