본문 바로가기
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);
 

 

반응형

댓글