Android导航组件后退按钮不起作用

时间:2020-07-13 22:28:00

标签: android kotlin android-fragments android-databinding android-viewmodel

我有活动:

<layout xmlns:tools="http://schemas.android.com/tools">
<data>
    <variable
        name="viewModel"
        type="model" />
</data>
<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">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <com.google.android.material.appbar.AppBarLayout
            android:id="@+id/appBarLayout_wallet"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintTop_toTopOf="parent"
            android:background="@color/colorPrimary">

            <androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="16dp"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="5dp"
                android:layout_marginEnd="16dp">

                <androidx.appcompat.widget.AppCompatImageView
                    android:id="@+id/appCompatImageView_go_back"
                    android:layout_width="28dp"
                    android:layout_height="wrap_content"
                    android:foreground="?android:attr/selectableItemBackground"
                    android:tint="@color/colorWhite"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    app:srcCompat="@drawable/ic_ico_arrow_left" />

                <ImageView
                    android:layout_width="45dp"
                    android:layout_height="38dp"
                    android:tint="@color/colorWhite"
                    android:src="@drawable/tuya_logo_top"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />

                <androidx.appcompat.widget.AppCompatImageView
                    android:id="@+id/appCompatImageView_help"
                    android:layout_width="30dp"
                    android:layout_height="30dp"
                    android:foreground="?android:attr/selectableItemBackground"
                    app:srcCompat="@drawable/ic_tuya_help"
                    android:tint="@color/colorWhite"
                    android:visibility="gone"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintVertical_bias="0.4" />

            </androidx.constraintlayout.widget.ConstraintLayout>
        </com.google.android.material.appbar.AppBarLayout>

        <androidx.fragment.app.FragmentContainerView
            android:id="@+id/nav_host_fragment_wallet"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:navGraph="@navigation/wallet_navigation"
            app:defaultNavHost="true" />
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

然后我创建了导航图: NavGraph

当我导航到第一个片段时,一切都很好。从第一个片段中,我使用以下命令导航到另一个片段:

findNavController().navigate(WalletRegisterFragmentDirections.actionWalletRegisterFragmentToWalletRegisterConfirmFragment(
                        viewModel.getExpeditionDate(), viewModel.expeditionPlace
                    ))

然后,在第二个片段中,我尝试使用以下命令返回上一个片段:

(activity as WalletActivity).appCompatImageView_go_back.setOnClickListener {
        requireActivity().onBackPressed()
    }

但是该行为无法按预期工作,导航不会返回到先前的片段,而是重新加载当前片段,这是我使用的一种解决方法:

requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
        findNavController().navigate(R.id.nameofFirstFragment)
    }

要导航到上一个片段,但我不想使用该行为,因为它不会保存上一个片段的实例,所以请创建一个新实例。

我在做什么错,为什么导航组件的后退按钮不起作用?

谢谢

0 个答案:

没有答案