Fragment (1)

Du-Hyeon, Kim·2023년 9월 7일
0

Android

목록 보기
9/12

Fragment

MainFragment

1. layout 안에 layout

부분화면 = layout 안의 layout의 화면
부분화면을 fragment를 넣어서 만들 수 있다.

화면 간에 fragment로 구성한 요소를 가져다 쓰기 위해서 만듦
-> 재사용을 위한 것

activity를 본따서 만듬

activity -> 시스템이 관리

activity
activity manager가 activity간 전환을 함

fragment
intent같은 건 없음
프래그먼트 메니저가 메소드로서 다른 fragment를 호출함
activity위에서 전환됨
(activity는 fragment의 시스템과 같은 역학)

2. fragment 추가법

activity보다 보안이 좋을 수도 있다.
태그로 넣을 수도
fragmentManager를 이용할수도
있다.

액티비티와 마찬가리로 JAVA + XML로 구성됨

3. Fragment.JAVA

가장 필수적인 함수 = View onCreateView
만 남김

public class MainFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_main, container, false);
    }
}

역할
xml을 inflation 메모리에 올리면서 이 fragment에 연결해주는 역할을 함

4. Mainactivity에 fragment연결(xml)

<fragment
        android:id="@+id/mainFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="org.techtown.fragment.MainFragment"/>

Layout안에 태그로 연결함
width / height는 view와 같이 했기 떄문에 필수적임

5. JAVA소스코드에서 fragment추가하는 방법

먼저, MainFragment의 rootView를 inflation에서 받아와서
layout xml이 메모리에 올라가고
button id를 이용해서 button의 onClickListener를 사용한다.

이때, button을 눌렀을때 fragment 전환은 mainactivity에 위임하는 방법을 취한다.

button 클릭 -> onFragmentChanged 함수 실행(main에 정의됨) -> '1'값 전달
-> fragmentManager로 Fragment replace함

6. onFragmentChanged 함수

public void onFragmentChanged(int index){
        if(index == 0){
            getSupportFragmentManager().beginTransaction().replace(R.id.container, mainFragment).commit();
        } else if(index == 1){
            getSupportFragmentManager().beginTransaction().replace(R.id.container, menuFragment).commit();
        }
    }

7. MainFragment onCreateView함수

일단 return은 layout xml이 연결된 view를 넘김
그 return전에
layout.xml로 부터 버튼id를 찾고,
그 onClickListener을 걸러야 return전에 작업을 해놓을 수 있음!!

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_main, container, false);
        //inflation으로 layout xml을 메모리에 올리는 과정
        //즉, 이 소스코드와 layout xml을 연결하는 과정

        Button button = rootView.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                MainActivity activity = (MainActivity) getActivity();
                //내가 올라가 있는 activity 참조
                activity.onFragmentChanged(1);
                //우리가 onFragmentChanged를 정의해야됨
            }
        });

        return rootView;
    }

0개의 댓글