我有两个片段调用CreateRoomFragment
和DisplayPhotoFragment
,导航图如下所示:
<navigation>
<fragment
android:id="@+id/createRoomFragment"
android:name="package.room.CreateRoomFragment"
android:label="Create a room"
tools:layout="@layout/fragment_create_room">
<action
android:id="@+id/action_createRoomFragment_to_roomFragment"
app:destination="@id/roomFragment" />
<action
android:id="@+id/action_createRoomFragment_to_displayPhotoFragment"
app:destination="@id/displayPhotoFragment" />
</fragment>
<fragment
android:id="@+id/displayPhotoFragment"
android:name="package.fragment.DisplayPhotoFragment"
android:label="fragment_display_photo"
tools:layout="@layout/fragment_display_photo" >
<argument android:name="bitmap"
app:argType="android.graphics.Bitmap"/>
</fragment>
因此,当我想从CreateRoomFragment
移至DisplayPhotoFragment
时,我使用以下方法:
NavDirections action = CreateRoomFragmentDirections.actionCreateRoomFragmentToDisplayPhotoFragment(selectedPhoto);
Navigation.findNavController(view).navigate(action);
这样做,我可以导航到DisplayPhotoFragment
。
但是当我按下设备的back
按钮以及工具栏上的Back arrow
时,它无法返回到CreateRoomFragment
。
我尝试过此操作,但仍无法返回上一个片段:
requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(),
new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
navController.navigateUp(); //I tried this
navController.popBackStack(R.id.createRoomFragment,false); //and also this
}
});
现在的主要问题:
通过使用上面的代码,屏幕没有返回到先前的片段(CreateRoomFragment
)。它仍然停留在DisplayPhotoFragment
中,但是同时,正在调用CreateRoomFragment
onViewCreated
部分中的API方法。
是什么原因造成的?以及如何解决这个问题?
navigate()
方法的调用都会在堆栈顶部放置另一个目标。向上敲击或向后敲击分别调用NavController.navigateUp()
和NavController.popBackStack()
方法,以从堆栈中移出(或弹出)顶部目标。