Fragment란, 어플리케이션에서 화면에 직접 보이는 공간인 Activity내에서
분할시키고 다른 화면으로 전환할 수 있는 화면 공간의 단위입니다.
Fragment를 이용하려면, 그 상위에 있는 Activity에서 출력할 layout을 제어해줘야 합니다.
하지만 Fragment내부에서 다른 Fragment로 이동하는 것은 그 Fragment가 자신의 하위레벨이 아니기 때문에
내부에서 직접 제어할 수 없으므로, 상위 레벨인 Activity를 호출하여 제어하는 형태가 되어야 합니다.
MainActivity 아래에 A, B, C 라는 3개의 Fragment를 만들었다고 가정 시,
A, B, C Fragment의 내부에서 서로 다른 Fragment로 전환하는 방법입니다.
먼저 MainActivity의 onCreate() 메소드에서 기본적으로 사용할 Fragment공간과 초기 Fragment의 Instance를 전달합니다.
- MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 화면 전환 프래그먼트 선언 및 초기 화면 설정
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.ContentLayout, StudyFragment.newInstance()).commit();
}
그 다음, 다른 Fragment로 전환할 때 이용할 메소드를 정의합니다.
- MainActivity.java
public void replaceFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.ContentLayout, fragment).commit(); // Fragment로 사용할 MainActivity내의 layout공간을 선택합니다.
}
MainActivity에서든 Fragment 내부에서든 Fragment를 전환할 때 이 메소드를 이용할 예정입니다.
그리고 Fragment 내부에서 다른 Fragment로 전환할 event를 정의합니다.
- StudyFragment.java (study_fragment.xml Layout 이용)
public class StudyFragment extends Fragment {
// 각각의 Fragment마다 Instance를 반환해 줄 메소드를 생성합니다.
public static StudyFragment newInstance() {
return new StudyFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstaceState) {
View view = inflater.inflate(R.layout.study_fragment, null); // Fragment로 불러올 xml파일을 view로 가져옵니다.
Button button1 = (Button)view.findViewById(R.id.study_button); // click시 Fragment를 전환할 event를 발생시킬 버튼을 정의합니다.
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// getActivity()로 MainActivity의 replaceFragment를 불러옵니다.
((MainActivity)getActivity()).replaceFragment(NewFragment.newInstance()); // 새로 불러올 Fragment의 Instance를 Main으로 전달
}
});
return view;
}
}
참고로 Activity 하위의 모든 Fragment들이 newInstance() 메소드를 가지고 있어야 화면 전환이 가능합니다.
이걸로 생각보다 간단하게 해결했습니다.
'Operating Systems > Android' 카테고리의 다른 글
[Android] 안드로이드에서 Thread 종료하는 방법 (0) | 2018.11.26 |
---|---|
[Android] 어플리케이션 기본적인 버튼과 기능 만들기 (0) | 2016.08.28 |