안녕하세요~ 효그니에여>< 뭔가 피곤한 하루네요.
이번차시에는 Fragment에 대하여 알아볼건데요!
안드로이드에서는 화면을 바꿀때 두가지 방법이 제공되요!
하나는 화면 하나를 구성하고있는 액티비티를 새로 띄우는 방법과, 나머지는 액티비티의 일부분을 교체하는 프래그먼트 방식인데요.
먼저 시각적으로는 액티비티를 새로 띄우는경우 화면전체가 슬라이딩 된다던가 하는것을 볼 수 있고, 프래그먼트는 특정부분만 변경되는것을 볼 수 있어요.
우선 한번 안드로이드 스튜디오로 들어가 볼까요?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<Button
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"
android:id="@+id/btn1"/>
<Button
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2"
android:id="@+id/btn2"/>
<Button
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="3"
android:id="@+id/btn3"/>
</LinearLayout>
<FrameLayout
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
activity_main에 이렇게 버튼 3개와 FrameLayout을 생성해줍시다! 하단 FrameLayout이 Fragment가 들어갈 곳이에요!
다음은 layout폴더에 프레그먼트 3개를 생성해 볼까요?
fragment_one.xml
fragment_two.xml
fragment_three.xml
이렇게 세개의 프래그먼트를 생성해 볼까요?
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="1"
android:textSize="60dp"
android:gravity="center"/>
</android.support.constraint.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="2"
android:textSize="60dp"
android:gravity="center"/>
</android.support.constraint.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="3"
android:textSize="60dp"
android:gravity="center"/>
</android.support.constraint.ConstraintLayout>
이렇게 3개를 만들어주었습니다!
그리고
OneFragment.kt
TwoFragment.kt
ThreeFragment.kt
라는 파일도 생성해주세요!
class OneFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_one, container, false)
}
}
class TwoFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_two, container, false)
}
}
class ThreeFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_three, container, false)
}
}
이렇게요! 생성 방법이 Activity와는 다르죠?
Activity라면 :AppCompatActivity()같은 거였겠지만 Fragment는 :Fragment()방식이랍니다!
그리고 나서
MainActivity로 넘어가주세요!
supportFragmentManager.beginTransaction()
.replace(R.id.view, OneFragment())
.commit()
이 소스가 가장 중요해요
FragmentManager를 사용해서 어떤 대상에 대해 추가(beginTransaction)을 해주는것인데요
FrameLayout의 Id를 view로 주었으니 view를 불러오고, OneFragment()로 추가해주는거에요!
그리고 버튼을 총 3개를 줬었죠?
btn1.setOnClickListener {
supportFragmentManager.beginTransaction()
.replace(R.id.view, OneFragment())
.commit()
}
btn2.setOnClickListener {
supportFragmentManager.beginTransaction()
.replace(R.id.view, TwoFragment())
.commit()
}
btn3.setOnClickListener {
supportFragmentManager.beginTransaction()
.replace(R.id.view, ThreeFragment())
.commit()
}
이렇게 해줍시다!
그리고 한번 실행해 볼까요?
잘 켜지네요?
그럼 버튼을 눌러서 프레그먼트를 불러와 볼까요?
정말로 잘되는군요!!
근데....<activity ... 를 AndroidManifest에 추가하지 않았는데도 에러가 나지 않는게 이상하다구요?
당연합니다! Fragment는 액티비티로 취급되지 않기 때문입니다!
이번시간에 배워본건 Frament입니다!
뭔가 애매모호 하죠?
그래도 정말 중요한 개념중 하나이니 꼭 집고 넘어가도록 해요!!
다음 차시에 만나요!!
'Android > Android Lecture' 카테고리의 다른 글
안드로이드 강의 10. RecyclerView와 Floating Action Button (5) | 2019.04.10 |
---|---|
안드로이드 강의 9. TabLayout & ViewPager 와 BaseActivity사용 (0) | 2019.04.10 |
안드로이드 강의 7. ListView 사용법과 CardView레이아웃! (2) | 2019.04.09 |
안드로이드 강의 6. Handler를 이용한 Splash화면 구현 (2) | 2019.04.08 |
안드로이드 강의 5. Intent와 Activity 이동 (5) | 2019.04.08 |