본문 바로가기
MOBILE/Android

[Android] Fragment 뒤로가기 버튼누르면 이전 Fragment 보여지게 하는 방법

by 지구 2018. 8. 3.

Android 에서 A Fragment -> B Fragment 화면 전환 후,

B Fragment 에서 뒤로가기를 누르면 다시 A Fragment 를 호출하는 방법이다.

 

인터넷에보면 다 transaction.addToBackStack(null); 하면 된다고 하는데.. 안돼서 찾아보니,

replace 했을 때는 교체를 한 것이기 때문에 Back버튼 이벤트에 대해 자동으로 뒤로가기가 되지 않는다고 한다. (출처)

그러므로 Activity.onBackPressedOverride 를 해야하는데, 그 방법에 대해 기술한다 !


1. MainActivity 하단에 메소드 추가

//뒤로가기 버튼을 뺏어올 리스너 등록
    public interface onKeyBackPressedListener {
        void onBackKey();
    }
    private onKeyBackPressedListener mOnKeyBackPressedListener;
    public void setOnKeyBackPressedListener(onKeyBackPressedListener listener) {
        mOnKeyBackPressedListener = listener;
    }

    //메인에서 토스트를 띄우며 종료확인을 하기 위해 필드선언
    EndToast endToast = new EndToast(this);

    @Override
    public void onBackPressed() {
        if (mOnKeyBackPressedListener != null) {
            mOnKeyBackPressedListener.onBackKey();
        } else {
            //쌓인 BackStack 여부에 따라 Toast를 띄울지, 뒤로갈지 
            if(getSupportFragmentManager().getBackStackEntryCount()==0){
                //* 종료 EndToast Bean 사용
                endToast.showEndToast("종료하려면 한번 더 누르세요.");
            }else{
                super.onBackPressed();
            }
        }
}

 

2. 뒤로가기 버튼을 누를 LoginFragment 하단에 메소드 Override

//BackStack 으로 뒤로가기 버튼 누르면 전 화면으로 이동하기 위함
    @Override
    public void onBackKey() {
        MainActivity activity = (MainActivity) getActivity();
        activity.setOnKeyBackPressedListener(null);
        activity.onBackPressed();
    }
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        ((MainActivity)context).setOnKeyBackPressedListener(this);
}

 

3. 아 그리고 꼭!!!!! 뒤로가기 버튼을 누를 Fragment 에서 addToBackStack() 을 해줘야 한다.

transaction.addToBackStack(null);
 

 

반응형

댓글4

  • BlogIcon 호라떼 2020.03.23 18:39 신고

    endToast 빨간줄뜨는데 이게뭔가요
    답글

    • BlogIcon 지구 2020.03.27 10:24 신고

      안녕하세요 호라떼님,

      이 글을 작성한지 2년여되어서 무언가 달라졌을거라고 짐작됩니다.

      우선, 이 글은 JAVA 언어로 작성되었는데, 코틀린 언어로 개발중이시라면 지원여부 및 대체 Bean 을 확인해보셔야 될 것 같습니다.

      그게 아니면, Deprecated 된건지 에러메세지를 확인해보셔야 될 것 같습니다.

      현재 안드로이드를 잠시 접고 웹개발을 진행중이라 직접적인 해결을 도와드리지 못했네요. 죄송합니다.

      좋은 하루 되세요 :)

    • BlogIcon 2021.06.10 17:09

      Toast.makeToast로 바꾸시거나 그냥 없어도 상관은 없어요. 잠깐 떴다가 사라지는 메시지라 넣어주면 편한거 거든요

    • BlogIcon 지구 2021.06.25 09:06 신고

      ㅇ 님

      와! 지식 나눔에 감사드립니다 (__)