处理 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
将该事务放入后台堆栈。当用户点击后退按钮时,堆栈中的最后一个事务被弹出,并且该事务中的所有更改都被还原。
因此,如果交易 replace
s Fragment A 与 Fragment B,以及 add
s Fragment C,使用后退按钮(或 popBackStack()
)弹出该事务将撤消该操作并将其恢复到原来的状态,只有 Fragment A。因此,您可以建立特定的历史记录状态,用户可以后退(如网络浏览器)并准确控制后退按钮的功能。
你也可以提供一个带有addToBackStack
的标签(如果你不在乎就用null),
然后使用该标签调用 popBackStack
以一次性跳回该交易(或之前的交易)。因此,您可以创建一个工作流,用户可以在其中一次返回一个步骤,或者点击一个按钮跳回到您标记的特定步骤,例如某些任务的开始或概述等
我需要覆盖默认的后退按钮行为,以便我可以转到上一个片段而不是关闭整个应用程序。
下面是这个函数的实现
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
将该事务放入后台堆栈。当用户点击后退按钮时,堆栈中的最后一个事务被弹出,并且该事务中的所有更改都被还原。
因此,如果交易 replace
s Fragment A 与 Fragment B,以及 add
s Fragment C,使用后退按钮(或 popBackStack()
)弹出该事务将撤消该操作并将其恢复到原来的状态,只有 Fragment A。因此,您可以建立特定的历史记录状态,用户可以后退(如网络浏览器)并准确控制后退按钮的功能。
你也可以提供一个带有addToBackStack
的标签(如果你不在乎就用null),
然后使用该标签调用 popBackStack
以一次性跳回该交易(或之前的交易)。因此,您可以创建一个工作流,用户可以在其中一次返回一个步骤,或者点击一个按钮跳回到您标记的特定步骤,例如某些任务的开始或概述等