Fragment中攔截onBackPressed()返回事件

由於Fragment中沒有onBackPressed回調,所以需要在Activity中收到onBackPressed回調時去執行Fragment中相應的操作,再根據Fragment中返回的結果判斷是否回退。

  1. 創建一個接口
    interface IOnBackPressed {
    	fun onBackPressed(): Boolean
    }
    
  2. 讓需要處理onBackPressed事件Fragment實現該接口
    class TestFragment : Fragment(), IOnBackPressed {		
    
        override fun onBackPressed(): Boolean {
        	//這裏進行自己想要的操作,Activity調用此方法時根據返回的結果判斷是否回退
        	val back = (1 + 1 ) > 2
            return if (back) {
               
                false
            } else true
        }
    
    }
    
  3. 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()
        }
    }
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章