如何使用导航组件从第二个片段返回到第一个片段?

How can I back from the second fragment to the first fragment using Navigation Component?

如何使用导航组件从第二个片段返回到第一个片段?

navigation_main.xml

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_navigation"
    app:startDestination="@id/firstFragment">

    <fragment
        android:id="@+id/firstFragment"
        android:name="com.test.ttt.FirstFragment"
        tools:layout="@layout/fragment_first">

        <action
            android:id="@+id/action_firstFragment_to_secondFragment"
            app:destination="@id/secondFragment"
            app:popUpTo="@id/firstFragment" 
            app:popUpToInclusive="true"/>

    </fragment>

    <fragment
        android:id="@+id/secondFragment"
        android:name="com.test.ttt.SecondFragment"
        tools:layout="@layout/fragment_second" />

</navigation>

FirstFragment.java

public class FirstFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Navigation.findNavController(container).navigate(FirstFragmentDirections.actionFirstFragmentToSecondFragment());
        return inflater.inflate(R.layout.fragment_first, container, false);
    }

}

我希望当我在第二个片段中按下后退按钮时,它必须返回到第一个片段,但目前,当我在第二个片段中按下后退按钮时,它会离开应用程序。

我该如何解决这个问题?

您退出应用程序的原因是,在导航到第二个片段时,您正在从堆栈中删除第一个片段。属性 app:popUpToapp:popUpToInclusive 通常在您想要在导航时从后台堆栈中删除一些片段时使用。一个简单的用例是从 Login/SignUp 片段导航到 Home/Main 片段。在这种情况下,您不希望用户能够按返回键并返回到 login/signup 屏幕。这是这两个属性可以提供帮助的地方。

TL;DR - 从您的操作中删除 app:popUpToapp:popUpToInclusive 属性

改变

    <action
        android:id="@+id/action_firstFragment_to_secondFragment"
        app:destination="@id/secondFragment"
        app:popUpTo="@id/firstFragment" 
        app:popUpToInclusive="true"/>

    <action
        android:id="@+id/action_firstFragment_to_secondFragment"
        app:destination="@id/secondFragment"/>