由於Fragment
中沒有onBackPressed
回調,所以需要在Activity
中收到onBackPressed
回調時去執行Fragment
中相應的操作,再根據Fragment
中返回的結果判斷是否回退。
- 創建一個接口
interface IOnBackPressed { fun onBackPressed(): Boolean }
- 讓需要處理
onBackPressed事件
的Fragment
實現該接口class TestFragment : Fragment(), IOnBackPressed { override fun onBackPressed(): Boolean { //這裏進行自己想要的操作,Activity調用此方法時根據返回的結果判斷是否回退 val back = (1 + 1 ) > 2 return if (back) { false } else true } }
- 在
Activity
中重寫onBackPressed
方法,當執行super.onBackPressed()
表示該Activity
會回退。override fun onBackPressed() { val fragment = (supportFragmentManager.findFragmentById(R.id.container)) as? IOnBackPressed if (fragment == null || fragment.onBackPressed()) { //此Activity會回退的情況 //1. 當前展示的Fragment未實現IOnBackPressed接口 //2. 該fragment重寫的onBackPressed()方法返回true super.onBackPressed() } }