如何使用导航组件从第二个片段返回到第一个片段?
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:popUpTo
和 app:popUpToInclusive
通常在您想要在导航时从后台堆栈中删除一些片段时使用。一个简单的用例是从 Login/SignUp 片段导航到 Home/Main 片段。在这种情况下,您不希望用户能够按返回键并返回到 login/signup 屏幕。这是这两个属性可以提供帮助的地方。
TL;DR - 从您的操作中删除 app:popUpTo
和 app: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"/>
如何使用导航组件从第二个片段返回到第一个片段?
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:popUpTo
和 app:popUpToInclusive
通常在您想要在导航时从后台堆栈中删除一些片段时使用。一个简单的用例是从 Login/SignUp 片段导航到 Home/Main 片段。在这种情况下,您不希望用户能够按返回键并返回到 login/signup 屏幕。这是这两个属性可以提供帮助的地方。
TL;DR - 从您的操作中删除 app:popUpTo
和 app: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"/>