如何在不重新加载导航组件体系结构的情况下导航到上一个片段

How to navigate to previous fragment without reloading in navigation component architecture

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

提前致谢

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

Class TestViewModel:ViewModel(){

 init{
   apiReqest()
 }

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

}

我会推荐 Dharmender 的方法,但如果您不使用视图模型,那么您可以试试这个:

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 标志。