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

조회수 7324회

안녕하세요. 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로 되돌아갈 수 있는 방법이 없을까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

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

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

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

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

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)