안드로이드 프로그래밍[JAVA Code]/Fragment

Fragment : 프래그먼트 부분 화면 이동하기

훈츠 2019. 12. 2. 05:56
반응형

 액티비티 클래스에 여러 액티비티를 넣는것은 많은 리소스를 포함시키므로 합리적이지 않은 방법이다.

하나의 화면을 여러 부분으로 나눠서 보여주거나 각각의 부분 화면 단위로 바꿔서 보여주고 싶을 때 사용하는 것이 프래그먼트 이다. 

프래그먼트의 목적

코드가 복잡해지는 문제를 해결하기 위해 각 부분화면의 코드를 분리시킨 것이므로 프래그먼트를 사용하는 가장 큰 목적은 분할된 화면들을 독립적으로 구성하고 그 상태를 관리하는 데 있다. 

액티비티 화면과 프래그먼트 화면은  다른것이다. 

똑같이 XML 레이아웃으로 만들지만 액티비티에 사용되면 시스템에서 관리하는 화면이고, 프래그먼트에서 사용되면 단순히 액티비티 위에 올라가는 화면의 일부, 즉 부분화면이 된다.  프래그먼트는 항상 액티비티 위에 올라가 있어야 한다는 점이다. 

프래그먼트 정리 

하나의 Fragment를 상속하는 Java 파일과, 부분화면이 되는 XML 파일로 이루어진다. 그리고 Flagment 를 상속하는 Java 파일에서 onCreateView 라는 메소드에서 inflate해서 return 시켜준다. mainActivity에서 Flagment 를 상속하는 java파일을 선언후, new로 새로 만든다. 그리고 FragmentManger 를 manager로 선언후, manager 안에서 getSupportFragmentManger 로 찾아준다. 그리고 manger 안에서 트랜재션. add or replace 시킨후 commit 하면 된다.

1) Fragment_main 정의  

public class Fragment_main extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
       ViewGroup rootView= (ViewGroup) inflater.inflate( R.layout.frag_main, container,false );
        return rootView;
    }
}

2) mainActivity에서 manager로 트랜잭션 시키기 

 Fragment_main fragment_main;
    Fragment_sub_L fragment_sub_l;
    FragmentManager manager;
    Button btn1,btn2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_main );
        btn1 = (Button) findViewById( R.id.button );
        btn2 = (Button) findViewById( R.id.button2 );

        fragment_main = new Fragment_main();
        fragment_sub_l = new Fragment_sub_L();
        manager = getSupportFragmentManager();

        btn1.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                manager.beginTransaction().replace( R.id.action_container,fragment_main ).commit();
            }
        } );
        btn2.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                manager.beginTransaction().replace( R.id.action_container,fragment_sub_l ).commit();
            }
        } );


    }
}

부분 화면이 잘 이동 하는지 확인한다. 

3) Fragment 에서 MainActivity 연결 하기 

public class Fragment_main extends Fragment {
    MainActivity mainActivity;
    Button btn,btn2,btn3;
    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach( context );
        mainActivity = (MainActivity) getActivity();
    }
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
       ViewGroup rootView= (ViewGroup) inflater.inflate( R.layout.frag_main, container,false );
        btn2 = (Button) rootView.findViewById( R.id.button2 );
        btn3= (Button) rootView.findViewById( R.id.button3 );

        btn2.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mainActivity.onFragmentChanged(2);
            }
        } );
        btn3.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mainActivity.onFragmentChanged(3);
            }
        } );
        return rootView;
    }

}
반응형