处理 android 个片段中的后退按钮操作

Handle back button actions inside android fragments

我需要覆盖默认的后退按钮行为,以便我可以转到上一个片段而不是关闭整个应用程序。

下面是这个函数的实现

class DataFragment : Fragment() {

private lateinit var fragment: Fragment
private lateinit var fm: FragmentManager
private lateinit var transaction: FragmentTransaction 

override fun onCreateView(
    inflater: LayoutInflater,
    @Nullable container: ViewGroup?,
    savedInstanceState: Bundle?
): View {
    requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner,object : OnBackPressedCallback(true){
        override fun handleOnBackPressed() {
            fragment = PreviousFragment()
            fm = parentFragmentManager
            transaction = fm.beginTransaction()
            transaction.replace(R.id.contentFragment, fragment)
            transaction.commit()
        }
    })
return binding.rootView
 }
}
public interface OnBackPressedListener {
    /**
     * register and implement OnBackPressedListener in fragment 
     * @update status onBackPressed() from Activity to current fragment to handle super.onBackPressed(); or to continue next process
     */
   void onBackPressed();
}

When you perform a FragmentTransaction, you can call addToBackStack 将该事务放入后台堆栈。当用户点击后退按钮时,堆栈中的最后一个事务被弹出,并且该事务中的所有更改都被还原。

因此,如果交易 replaces Fragment AFragment B,以及 adds Fragment C,使用后退按钮(或 popBackStack())弹出该事务将撤消该操作并将其恢复到原来的状态,只有 Fragment A。因此,您可以建立特定的历史记录状态,用户可以后退(如网络浏览器)并准确控制后退按钮的功能。

你也可以提供一个带有addToBackStack的标签(如果你不在乎就用null), 然后使用该标签调用 popBackStack 以一次性跳回该交易(或之前的交易)。因此,您可以创建一个工作流,用户可以在其中一次返回一个步骤,或者点击一个按钮跳回到您标记的特定步骤,例如某些任务的开始或概述等