我需要覆寫默認的后退按鈕行為,以便我可以轉到上一個片段而不是關閉整個應用程式。
下面是這個函式的實作
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
}
}
uj5u.com熱心網友回復:
當您執行 aFragmentTransaction時,您可以呼叫addToBackStack將該事務放在后臺堆疊中。當用戶點擊后退按鈕時,堆疊上的最后一個事務被彈出,并且該事務中的所有更改都被還原。
因此,如果一個事務replace是Fragment A和Fragment B,也是Fragment Cadd,使用后退按鈕(或)彈出該事務將撤消該事務并將其恢復到原來的狀態,只使用Fragment A。因此,您可以建立用戶可以后退的特定歷史狀態(如 Web 瀏覽器)并準確控制后退按鈕的作用。popBackStack()
您還可以提供一個帶有標簽的標簽addToBackStack(如果您不關心,請使用 null),然后popBackStack使用該標簽呼叫以一次性跳回該交易(或之前的交易)。因此,您可以創建一個作業流程,用戶可以一次回傳一個步驟,或者點擊一個按鈕,直接跳回到您標記的特定步驟,例如某些任務的開始或概述等
uj5u.com熱心網友回復:
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();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/424643.html
上一篇:無法通過單擊影像替換片段
下一篇:如何在片段內使用2秒的計時器?
