Activity로 데이터를 전달할 때는 Intent의 putExtras() 함수를 사용해 데이터를 입력하고 Intent를 전달하는 것으로 데이터를 전달할 수 있다.
하지만 Fragment에선 Intent를 사용할 수 없다.
Fragment를 담는 Activity에서 직접 데이터를 입력해줄 수 있긴 하지만 이 방법은 Fragment의 생명주기 때문에 구현에 문제가 있을 수 있었다. 그렇기에 더 좋은 방법을 찾아보게 되었다.
Fragment의 setArguments(Bundle)로 Bundle 안의 데이터를 전달할 수 있고,
Fragment의 getArguments()로 전달받은 Bundle을 확인할 수 있다.
다음은 startFragment에 bundle을 전달하는 코드이다.
public void gotoStart(Bundle bundle){
if(bundle != null){
startFragment.setArguments(bundle);
fragmentManager.beginTransaction().replace(R.id.container, startFragment).commit();
}
}
Activity에서 setArguments(bundle)을 통해 bundle객체를 전달했다. 그 후 startFragment를 Activity 위에 올려두었다.
전달된 bundle을 startFramgent는 다음과 같은 방법으로 받는다.
private String name;
private String birth;
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ViewGroup rootview = (ViewGroup) inflater.inflate(R.layout.fragment_start, container, false);
...
Bundle bundle = getArguments();
if(bundle != null){
name = bundle.getString("name", "");
birth = bundle.getString("birth", "");
}
...
}
name, birth 변수에 전달받은 bundle을 getArguments()로 확인한 후 저장하였다.