Handling back button in Android Navigation Component

前端 未结 23 1342
遥遥无期
遥遥无期 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:14

    So, I created an interface

    public interface OnBackPressedListener {
        void onBackPressed();
    }
    

    And implemented it by all fragments that need to handle back button. In main activity I overrided onBackPressed() method:

    @Override
    public void onBackPressed() {
        final Fragment currentFragment = mNavHostFragment.getChildFragmentManager().getFragments().get(0);
        final NavController controller = Navigation.findNavController(this, R.id.nav_host_fragment);
        if (currentFragment instanceof OnBackPressedListener)
            ((OnBackPressedListener) currentFragment).onBackPressed();
        else if (!controller.popBackStack())
            finish();
    
    }
    

    So, If the top fragment of my Navigation host implements OnBackPressedListener interface, I call its onBackPressed() method, elsewhere I simply pop back stack and close application if the back stack is empty.

提交回复
热议问题