[Android] 프래그먼트 데이터 공유(Not MVVM)2

2021. 5. 25. 13:14모바일/Android_Java

[Android] 프래그먼트 데이터 공유(Not MVVM)2

Activity

  • 최상위 프래그먼트 or 액티비티에서 리스너 인터페이스를 작성한다
  • 공유할 데이터들을 정의한다.
  • 각각의 프래그먼트에서 해당 함수들을 호출 할 때 할 행위들을 정의한다.
public class MyActivity extends Activity {

    private final String TAG = "MyActivity";

      private ApplyData applyData = new ApplyData(); // 신청 데이터
    private QueryData queryData = new QueryData(); // 조회 데이터

    public interface MyListener {
        int STEP_1 = 0;
        int STEP_2 = 1;
        int STEP_3 = 2;

        void fragmentStepMove(int step);  // 프래그먼트 단계 이동
        void changeToolbarTitle( String title );    // 툴바 타이틀변경
        ApplyData getpplyData();
        QueryData getQueryData();
    }


  MyListener myListener = new MyListener() {
        @Override
        public void fragmentStepMove(int step) {
            stepMove(step);
        }

        @Override
        public void changeToolbarTitle(String title) {
            tv_title.setText( title );
        }

        @Override
        public ApplyData getpplyData() {
            return applyData;
        }

        @Override
        public QueryData getQueryData() {
            return queryData;
        }
    };


   // 프래그먼트 단계 이동
    public void stepMove(int step) {
        FragmentTransaction transaction = fm.beginTransaction();

        //  1단계 
        if (step == MyListener.APPLY_STEP_1) {
                        Apply1Fragment apply1 = new Apply1Fragment();
            apply1.setListener(myListener);
            transaction.replace(R.id.apply_fragment, apply1);
            currentFragment = apply1;
        }
        //  2단계 
        else if (step == MyListener.APPLY_STEP_2) {
            Apply2Fragment apply2 = new Apply2Fragment();
            apply2.setListener(myListener);

            transaction.replace(R.id.apply_fragment, apply2);
            currentFragment = apply2;
        }
        //  3단계
        else if (step == MyListener.APPLY_STEP_3) {
            Apply3Fragment apply3 = new Apply3Fragment();
            Bundle bundle = new Bundle();
            apply3.setListener(myListener);

            transaction.replace(R.id.apply_fragment, apply3);
            currentFragment = apply3;
        }
    }
}

Fragment1

public class Apply1Fragment extends Fragment implements View.OnClickListener {
      // 신청해지 화면과의 인터페이스
    MyListener myListener;
    public void setListener( MyListener myListener) {
        this.myListener = myListener;
    }


      @Override
    public void onClick(View v) {
        switch ( v.getId() ) {
            // 다음단계로 이동
            case R.id.next:
                if( myListener != null ) {
                    myListener.fragmentStepMove( MYListener.APPLY_STEP_2 );
                }
                break;
        }
    }
}
  • Fragment2, Fragment3 도 같은방식으로 구현한다..
  • Fragment에서 함수를 호출하면 액티비티에서 구현한 리스너 함수로 프래그먼트를 변경하고, 액티비티에 필요한 데이터를 저장하고 가져오는 등의 행위를 한다