만족

[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>
 





Comments