안드로이드 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();
이 함수는 이전 상태를 백 스택에 저장합니다. 이 백 스택은 액티비티에 의해 관리되며 뒤로 버튼 클릭 시 이전 프래그먼트로 되돌아 가는 처리를 합니다.
자세한 내용은 다음 링크의 프래그먼트 트랜잭션 수행 부분을 읽어보세요.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력