안드로이드 Fragment 사이에서 BackButton을 눌렀을 때 이전 Fragment로 돌아가려면?


안녕하세요. PlaceActivity에서 InformationFragment와 UserInputFragment를 전환할 수 있도록 코드를 작성하고 있습니다. 기본적으로 PlaceActivity는 InformationFragment를 보여줍니다.


        InformationFragment informationFragment = InformationFragment.newInstance(placeId);
        openFragment(informationFragment);

...

    private void openFragment(final Fragment fragment) {
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.fragment_container, fragment);
        ft.commit();
    }

InformationFragment에서 버튼을 클릭하면 UserInputFragment로 전환하는 코드입니다.

        Button userInput = (Button)v.findViewById(R.id.btn_usr_input);
        userInput.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) {
                InputFragment inputFragment = InputFragment.newInstance(id);
                openFragment(inputFragment);
            }
        });

        return v;
    }

    private void openFragment(final Fragment fragment) {
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.fragment_container, fragment);
        ft.commit();
    }

사용자 입력이 끝난후 버튼을 클릭하면 다시 InformationFragment로 돌아갑니다. UserInputFragment에 구현된 코드는 다음과 같습니다.

       submitBT.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                String date = dateET.getText().toString();
                String score = String.valueOf(ratingRB.getRating());
                String userInput = opinionET.getText().toString();

                if (selectedImage == null) {
                    placeDAO.updatePlace(id, 1, date, score, userInput, null);
                } else {
                    placeDAO.updatePlace(id, 1, date, score, userInput, selectedImage.toString());
                }
                // DB 업데이트

                InformationFragment informationFragment = InformationFragment.newInstance(id);
                openFragment(informationFragment);
            }
        });

        return v;
    }

    private void openFragment(final Fragment fragment) {
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.fragment_container, fragment);
        ft.commit();
    }

이렇게 해서 입력 버튼을 누르면 다시 InformationFragment로 전환됩니다. 문제는 BackButton을 눌렀을때인데 이전 Fragment로 되돌아가는 게 아니라 Activity를 종료해서 이전 Activity로 되돌아가버립니다. BackButton을 눌렀을 때 이전 Fragment로 되돌아갈 수 있는 방법이 없을까요?

  • 2016년 07월 23일에 작성됨

조회수 204


1 답변


다음의 샘플 코드처럼 트랜잭션 커밋 전 addToBackStack() 함수를 호출하세요.

Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();

이 함수는 이전 상태를 백 스택에 저장합니다. 이 백 스택은 액티비티에 의해 관리되며 뒤로 버튼 클릭 시 이전 프래그먼트로 되돌아 가는 처리를 합니다.

자세한 내용은 다음 링크의 프래그먼트 트랜잭션 수행 부분을 읽어보세요.


  • 고맙습니다!    신재훈   2016.7.25 08:47     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close