【问题标题】:How to navigate to previous fragment without reloading in navigation component architecture如何导航到上一个片段而不在导航组件架构中重新加载
【发布时间】:2021-06-18 15:57:09
【问题描述】:

我有片段 A,它在打开时会加载一些数据。当我们点击时它有一个按钮。它导航到 Fragment B。这不是问题,问题是当我在 Fragment B 中按回按钮时,它来到 Fragment A 并在 Fragment A 中重新加载该数据。我的问题是我不想在 Fragment A 中重新加载该数据当从 Fragment B 后按时。

提前致谢

【问题讨论】:

  • 伴生对象中有一个标志,并在重新加载之前检查其值。
  • 你能详细说明一下还是一些代码。谢谢
  • 它不应该重新加载数据?您是否将片段 A 替换为 B 并将其添加到后台堆栈?
  • 我正在替换片段而不是回栈。

标签: android kotlin android-fragments android-architecture-navigation


【解决方案1】:

您应该使用 viewModel 并将所有数据放在 viewModel 中,以防回压片段将重新加载但您的数据不会刷新,它将与之前的视图相同。

Class TestViewModel:ViewModel(){

 init{
   apiReqest()
 }

fun apiReqest(){
 // writer here your api request code and observe it on view using observer
} 

}

【讨论】:

    【解决方案2】:

    我会建议 Dharmender 的方法,但如果您不使用 viewmodel,那么您可以试试这个:

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
            val tv1 = requireActivity().findViewById<TextView>(R.id.tv1)
            tv1.setOnClickListener {
                if(!isUpdated) {
                    isUpdated = true
                    requireActivity().supportFragmentManager.beginTransaction()
                        .replace((requireView().parent as ViewGroup).id, F2.newInstance())
                        .addToBackStack("f2").commit()
                }else{
                    Toast.makeText(requireActivity(),"Already updated!", Toast.LENGTH_LONG).show()
                }
            }
        }
    
        override fun onCreateView(
            inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
            // Inflate the layout for this fragment
            Log.e(TAG,"On create view")
            return inflater.inflate(R.layout.fragment_f1, container, false)
        }
    
        companion object {
            @JvmStatic
            fun newInstance() =
                F1()
            val TAG = F1::class.java.simpleName
            var isUpdated = false
        }
    

    这里我使用了一个标志 isUpdated。

    【讨论】:

    • 谢谢,这个解决方案效果很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 2021-03-20
    相关资源
    最近更新 更多