在片段的后按防止使用导航图调用前一个片段的 onViewCreated

Posted

技术标签:

【中文标题】在片段的后按防止使用导航图调用前一个片段的 onViewCreated【英文标题】:On back press of fragment prevent to call onViewCreated of previous fragment using navigation graph 【发布时间】:2019-06-14 19:38:12 【问题描述】:

我正在使用喷气背包导航在片段之间导航。

我有两个片段 UserListFragmentProfileFragment。 在调用服务器 API 的 UserListFragment 的 onViewCreated 方法上,用户点击任何项目都会重定向到 profileFragment。

如果用户从 ProfileFragment 按下返回,那么它应该来到正在工作的 userListFragment。 但是 onViewCreated 方法再次调用,因此 API 再次调用以从服务器获取数据。我不想调用第一个片段的onViewCreate。我想要与 fragmentManager.add() 而不是 fragmentManager.replace() 相同的行为。

这是我为导航编写的代码:

<fragment
    android:id="@+id/navigationUserListFragment"
    android:name="packageName.dashboard.UserListFragment"
    android:label="fragment_userlist"
    tools:layout="@layout/fragment_user_list">

   <action
        android:id="@+id/actionToProfile"
        app:destination="@id/navigationProfile"
        app:launchSingleTop="true"
        app:popUpTo="@id/navigationUserListFragment" />
</fragment>


<fragment
    android:id="@+id/navigationProfile"
    android:name="package.dashboard.ProfileFragment"
    android:label="profile_fragment"
    tools:layout="@layout/fragment_profile" />

所以我的问题是当用户按下第二个 Fragment 时,如何防止调用 onViewCreated

提前致谢

【问题讨论】:

【参考方案1】:

每当您从 ProfileFragment 再次访问 UserListFragment 时,都会调用 OnViewCreated 方法,因为每当您要打开新的配置文件片段时,前一个片段的视图将被破坏。

对于您的任务,我认为您应该使用 LiveData 机制或管理您的列表数据条件,如果它具有价值,那么 API 不应该调用。是的,如果个人资料屏幕有任何更改,则通过通信进行接口。

【讨论】:

我正在寻找导航图的属性。是的,我们可以在有条件的基础上使用列表数据来管理它,但如果它是导航的属性,那就更好了......

以上是关于在片段的后按防止使用导航图调用前一个片段的 onViewCreated的主要内容,如果未能解决你的问题,请参考以下文章

使用导航控制器按下后退按钮后如何防止前一个片段显示?

如何处理片段和活动中的后压

导航组件防止在后按时重新创建片段

在 Android 中使用片段时处理后按

如何防止在背面片段导航上再次设置视图模型

底部导航图标不变