Android - 프래그먼트로 데이터 전달

유의선·2024년 4월 12일

Activity로 데이터를 전달할 때는 IntentputExtras() 함수를 사용해 데이터를 입력하고 Intent를 전달하는 것으로 데이터를 전달할 수 있다.

하지만 Fragment에선 Intent를 사용할 수 없다.
Fragment를 담는 Activity에서 직접 데이터를 입력해줄 수 있긴 하지만 이 방법은 Fragment의 생명주기 때문에 구현에 문제가 있을 수 있었다. 그렇기에 더 좋은 방법을 찾아보게 되었다.


setArguments(Bundle), getArguments()

Fragment의 setArguments(Bundle)Bundle 안의 데이터를 전달할 수 있고,
Fragment의 getArguments()로 전달받은 Bundle을 확인할 수 있다.


다음은 startFragmentbundle을 전달하는 코드이다.

    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 위에 올려두었다.

전달된 bundlestartFramgent는 다음과 같은 방법으로 받는다.

    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 변수에 전달받은 bundlegetArguments()로 확인한 후 저장하였다.

0개의 댓글