android - 使用导航架构停止重新加载上一个 fragment

标签 android android-jetpack

我们如何通过按后退按钮停止从当前 fragment 重新加载前一个 fragment

前任。
就好像我们正在从 List-fragment 移动到 Details Fragment on back press 不需要使用 Android Jet Pack 和 Navigation Architecture 再次重新加载 List-fragment

<fragment
        android:id="@+id/my_nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/navigation_graph" />

最佳答案

导航组件目前仅支持 fragment 替换。因此,您将无法像使用手动 fragment 事务那样添加() fragment 。

但是,如果您担心重新膨胀布局和重新获取 fragment 的数据,则可以通过以下两种方法轻松解决。

  • 创建 View 后,将其存储在一个变量中,并在调用 onCreateView() 时使用它。
  • private var view: View? = null
    
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    
        if (view == null) {
            view = inflater.inflate(R.layout.fragment_list, container, false)
                    //...
        }
    
        return view
    
     }
    

    来源:https://twitter.com/ianhlake/status/1103522856535638016
  • 将 ViewModel 与 Fragment 一起使用,并将所需的数据保存为成员变量。
    这样,替换关联的fragment时,数据不会被清除。 ViewModel 仅在 fragment 的 onDestroy() 上被清除,这只会在您销毁父 Activity 时发生。
    https://developer.android.com/images/topic/libraries/architecture/viewmodel-lifecycle.png
  • 关于android - 使用导航架构停止重新加载上一个 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56162112/

    相关文章:

    java - 如何在不同 Activity 的android studio中加密/解密文本

    android - 与 viewPager 共享元素转换

    android - ACCESS_FINE_LOCATION 权限

    android - 声明应用不是 AccessibilityTool 以符合 google play 要求

    Android BottomNavigation 未使用导航 Controller 正确突出显示

    kotlin - 在jetpack compose中将默认方向设置为横向?

    java - 如何使用动态模型类中的模型值来改造请求?

    具有共享 View 模型的 Android 导航组件

    android - 导航组件 : Cannot find NavController

    Android Jetpack Navigation组件与BottomAppBar菜单交互