이 게시물은 다음 링크를 참조하여 학습했습니다.
오늘은 Fragments를 공부했다.
Fragments의 개념을 알기위해 구글링을 통해 이것저것 찾아봤는데, 잘 이해가 가지 않았다.
블로그에 있는 블로그들은 FrameLayout을 통해 fragments를 구현한 예제가 많았다.
developer android에서 Fragments에 대해 정의한 글을 정독하고 다시 유튜브와 블로그를 보니Fragments에 대해 이해할 수 있었다.
1. Fragments
1) 정의
처음에 xml파일에 fragment가 정의되어 있는 것을 보고 fragments는 위젯인가??? 하는 생각을 가졌다.
한마디로 정의하자면 fragment는 "다른 액티비티에 재사용할 수 있는 '하위 액티비티'와 같은 개념" 이다.
그동안 공부하면서 앱을 구현할 때, 여러개의 java파일을 만든 적이 많았는데
생각해보면 그동안 만들었던 java파일은 데이터를 저장하는 틀이 되는 class였거나,
ListView, RecyclerView, ViewPager등을 만들 때 구현한 Adapter였다.
Intent를 구현하면서 별도의 액티비티를 만든 적이 있긴 하지만, 그건 빈 액티비티였다.
Adapter나 데이터 저장 틀이 되는 class를 만들면서 같은 java파일을 만들었단 이유로 액티비티로 착각해서 Fragment를 이해하는데 오래걸렸던 것 같다.
그래도 이해가 되지 않는다면 다음 화면을 보면 된다.
메인 화면 안에 별도로 동작하는 두 개의 fragment가 있다.
예를 들어 뉴스 어플 같은 경우, Fragment1에 위치한 뉴스 리스트와, Fragment2에 위치한 뉴스 기사 내용은 별도로 동작한다.
이처럼 Fragment를 이용하면 한 화면 안에 각각의 액티비티를 갖는 여러개의 작은 화면을 구현할 수 있다.
2) 액티비티에 프래그먼트 추가
액티비티에 프래그먼트를 추가하는 방법은 크게 3가지가 있다.
(1) 프래그먼트를 액티비티의 레이아웃 파일 안에 선언
구문
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment android:name="com.example.news.ArticleListFragment"
android:id="@+id/list"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
<fragment android:name="com.example.news.ArticleReaderFragment"
android:id="@+id/viewer"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>
|
cs |
MainActivity.java를 거치지 않고 xml에서 직접 설정해주는 방법이다.
(2) 프로그래밍 방식으로 브래그먼트를 기존의 ViewGroup에 추가
구문
1
2
3
4
5
|
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment fragment = new Fragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
|
cs |
(1)번과 다르게 MainActivity를 거쳐서 FragmentManager의 FragmentTransaction 인스턴스를 통해 추가한다.
(3) FrameLayout 사용
(2)번과 방법은 유사하나, FrameLayout을 사용하여 하나의 레이아웃에서 여러개의 액티비티를 실행할 수 있다.
2. FragmentManager : 프래그먼트 백 스택을 관리한다.
FragmentTransaction을 통해 프래그먼트를 추가, 삭제, 변경할 수 있고,
레이아웃 컨테이너 내의 현재 프래그먼트를 findFragmentByID / findFragmentByTag를 통해 참조를 가져올 수 있다.
1) FragmentTransaction : 프래그먼트를 추가, 삭제, 변경한다.
자세한 속성은 developer android를 보면 알 수 있다.
이 글에선 자주 사용할 것 같은 속성만 정리했다.
메서드 | 설명 |
add() | 프래그먼트를 추가한다. |
remove() | 프래그먼트를 제거한다. |
replace() | 프래그먼트를 바꾼다. ( remove() + add() ) |
commit() | 변경사항을 저장한다. |
'Legacy' 카테고리의 다른 글
[안드로이드 스튜디오 정리#10-1] ProgressBar (0) | 2021.01.24 |
---|---|
[안드로이드 스튜디오 정리#10] Support User Interface (0) | 2021.01.24 |
[안드로이드 스튜디오 독학#24] Custom Button (2) | 2021.01.22 |
[안드로이드 스튜디오 정리#8-5] Resource-font/ (0) | 2021.01.22 |
[안드로이드 스튜디오 정리#8-4] Resource-values/ (0) | 2021.01.22 |