만족
[Android Studio] 프래그먼트(Fragment) 본문
[Android Studio] 프래그먼트(Fragment)
FrontEnd/Android Satisfaction 2017. 6. 30. 03:48프래그먼트(Fragment)란?
액티비티와 유사한 구조를 띄고 있으며, 액티비티 위에 붙여 사용하여
하나의 액티비티에 여러개의 프래그먼트를 붙임으로써, 동시에 여러 개의 화면을 보여줄 수 있다.
(하나의 액티비티에 조각(Fragment)들을 붙여 사용한다)
왜 사용하는가?
하나의 액티비티에 여러 가지 xml을 불러올 수 있으며
또한 Activity 각각 intent로 만들어 시작하는 것 보다, 하나의 Activity위에 Fragment를 교체해 가며 띄우는 것이
속도 측면에서 훨씬 빠르기 때문이다.
사용법
예를 들면 아래와 같은 어떤 layout.xml에서,
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.windows10.pp.MainActivity">
</LinearLayout>
fragment를 추가하고 싶다면 <fragment>태그를 사용한다. (첫 글자가 소문자임에 유의한다)
단, fragment는 일반적으로 FrameLayout 안에 위치시킨다.
또한 fragment를 감싸는 Layout은 반드시 id값을 specify 해 주어야 한다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.windows10.pp.MainActivity">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/container">
<!--불완전한 fragment 태그-->
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
</LinearLayout>
fragment 태그 안의 속성에
android: name= "패키지 경로를 포함한 fragment java source 경로" 를 명시하여야 한다.
fragment에 xml을 표시하기 위해, java 소스로 돌아가서
Fragment를 상속하는 클래스를 하나 만들어준다.
onCreateView 메소드를 오버라이드하여 container에 inflate 해준다.
여기에서 container는 fragment를 감싸고 있는 layout이며, 이 경우 FrameLayout이다.
public class ExFragment_1 extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//container에 R.layout.ex_fragment를 inflate 해라
ViewGroup rootView=(ViewGroup)inflater.inflate(R.layout.ex_fragment_1, container, false);
return rootView;
}
}
단 Fragment 클래스를 import할때,
import android.support.v4.app.Fragment;
을 import 해야 한다.
물론 다른 Fragment를 import해와도 되지만, 이전 버전의 OS까지 지원하기 위해 해당 패키지를 선택한다.
이제 다시 xml로 돌아가서, fragment태그의 android:name 속성값에, ExFragment의 경로를 명시해준다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.windows10.pp.MainActivity">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/container">
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.example.windows10.pp.ExFragment_1"/>
</FrameLayout>
</LinearLayout>
'FrontEnd > Android' 카테고리의 다른 글
[Android Studio] Event Listener의 이해 (0) | 2017.06.30 |
---|---|
[Android Studio] java.lang.IllegalStateException: commit already called java.lang.IllegalStateException: commit already called (0) | 2017.06.30 |
[Android Studio] 권한(Permission) 부여 (0) | 2017.06.30 |
[Android Studio] 브로드캐스트 수신자(BroadCast Receiver) (0) | 2017.06.30 |
[Android Studio] 서비스(Service) (0) | 2017.06.30 |