액티비티 클래스에 여러 액티비티를 넣는것은 많은 리소스를 포함시키므로 합리적이지 않은 방법이다.
하나의 화면을 여러 부분으로 나눠서 보여주거나 각각의 부분 화면 단위로 바꿔서 보여주고 싶을 때 사용하는 것이 프래그먼트 이다.
프래그먼트의 목적
코드가 복잡해지는 문제를 해결하기 위해 각 부분화면의 코드를 분리시킨 것이므로 프래그먼트를 사용하는 가장 큰 목적은 분할된 화면들을 독립적으로 구성하고 그 상태를 관리하는 데 있다.
액티비티 화면과 프래그먼트 화면은 다른것이다.
똑같이 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;
}
}
'안드로이드 프로그래밍[JAVA Code] > Fragment' 카테고리의 다른 글
Fragment : Adapter 에서 View 에 대한 정리 (0) | 2019.12.12 |
---|---|
Fragment : Activity 에서 부분화면 inflation 하는 방법 (0) | 2019.12.12 |
Fragment : 생명주기 (0) | 2019.12.03 |