Handling back button in Android Navigation Component

前端 未结 23 1355
遥遥无期
遥遥无期 2020-11-29 18:20

I\'d like to know how properly handle system back button action using Navigation Controller. In my app I have two fragments (for ex. fragment1 and fragment2) and I have an a

23条回答
  •  爱一瞬间的悲伤
    2020-11-29 19:10

    If you are using BaseFragment for your app then you can add onBackPressedDispatcher to your base fragment.

    //Make a BaseFragment for all your fragments
    abstract class BaseFragment : Fragment() {
    
    private lateinit var callback: OnBackPressedCallback
    
    /**
     * SetBackButtonDispatcher in OnCreate
     */
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setBackButtonDispatcher()
    }
    
    /**
     * Adding BackButtonDispatcher callback to activity
     */
    private fun setBackButtonDispatcher() {
        callback = object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
                onBackPressed()
            }
        }
        requireActivity().onBackPressedDispatcher.addCallback(this, callback)
    }
    
    /**
     * Override this method into your fragment to handleBackButton
     */
      open fun onBackPressed() {
      }
    
    }
    

    Override onBackPressed() in your fragment by extending basefragment

    //How to use this into your fragment
    class MyFragment() : BaseFragment(){
    
    private lateinit var mView: View
    
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        mView = inflater.inflate(R.layout.fragment_my, container, false)
        return mView.rootView
    }
    
    override fun onBackPressed() {
        //Write your code here on back pressed.
    }
    

    }

提交回复
热议问题