ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ Android ] Fragment Toolbar에서 back button 동작 안 하는 오류
    Android 2020. 5. 19. 18:25

     

      CatServant  

    Toolbar

    특정 Fragment에서 Toolbar에 Backbutton을 추가한 뒤 Toolbar 내에 있는 BackButton을 Click 했을 때 호출했던 Fragment로 돌아가지 않는 문제가 있었다.

     

     

    Fragment에서 Fragment 호출하기

        public void replaceFragment(Fragment fragment) {
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.main_container, fragment).addToBackStack(null).commit();
        }

    해당 프로젝트에서는 mainView Fragment에서 settingView Fragment를 호출해야 하는 방식으로 동작했다.

    Back Button을 눌렀을 때 기존에 있었던 Fragment로 돌아오기 위해서  addToBackStack(null) 을 추가했다.

     addToBackStack(null)  : Stack에 이전 Fragment를 쌓아두는 것이다.

     

    Fragment에서 Activity에 있는 Toolbar의 Back Button 보여주기 / 사라지게 하기

        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_setting, container, false);
            showBackButton();
            return rootView;
        }
    
        private void showBackButton() {
            ((MainActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            this.setHasOptionsMenu(true);
        }
    
        private void disappearBackButton() {
            ((MainActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(false);
        }
    
        @Override
        public void onPause() {
            super.onPause();
            disappearBackButton();
        }

    각각의 Fragment마다 Toolbar에 나타나는 기능이 달랐으면 했다. SettingView에서는 BackButton이 필요했지만 이외의 화면에서는 필요없어서 해당 뷰가 생성될 때와 사라질 때 Back Button을 생성/삭제하였다.

     

    Fragment Toolbar에서 Back Button 동작 안 하는 오류

    하단에 있는 Back Button을 누르면 기존에 보고 있던 Fragment로 돌아왔지만 Toolbar에 있는 Back button을 누르면 돌아오지 않는 오류가 있었다. 이는 Setting Fragment에 아래의 코드를 넣어주자 해결되었다.

        @Override
        public boolean onOptionsItemSelected(@NonNull MenuItem item) {
            super.onOptionsItemSelected(item);
            ((MainActivity)getActivity()).onBackPressed();
            return true;
        }

     

     

    출처

    댓글

Designed by Tistory.