Панель инструментов setNavigationOnClickListener не работает / игнорируется

#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()
        }
    }
}