Handling back button in Android Navigation Component

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

    I have searched through many threads and none of them work. Finally I found one:

    MainActivity.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        Toolbar mToolbar = findViewById(R.id.topAppBar);
        setSupportActionBar(mToolbar);
    }
    
    @Override
    public boolean onSupportNavigateUp() {
        navController.navigateUp();
        return super.onSupportNavigateUp();
    }
    

    MyFragment.java

    @Override
    public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {
        Toolbar mToolbar = (MainActivity) getActivity().findViewById(R.id.topAppBar);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Do something when uses presses back button (showing modals, messages,...)
                // Note that this will override behaviour of back button
            }
        });
    }
    
    @Override
    public void onStop() {
        // Reset back button to default behaviour when we leave this fragment
        Toolbar mToolbar = (MainActivity) getActivity().findViewById(R.id.topAppBar);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mainActivity.onBackPressed();
            }
        });
    
        super.onStop();
    }
    

提交回复
热议问题