외로운 Nova의 작업실
안드로이드 앱 프로그래밍 - 15(제트팩 라이브러리 - 뷰페이저2) 본문
- 뷰페이저2
뷰페이저는 스와이프 이벤트로 화면을 전환할때 사용합니다. 개발자들은 오랫동운 뷰페이저를 사용했지만 2019년부터는 뷰페이저2를 제공했습니다. 뷰페이저2가 기능이 더 많습니다. 따라서 뷰페이저2를 사용하겠습니다. 프래그먼트를 활요해 뷰페이저를 만들어보겠습니다.
- 뷰페이저 선언
그래들 파일에 아래와 같이 선언해줍니다.
implementation 'androidx.viewpager2:viewpager2:1.0.0'
- 메인액티비티.xml에 뷰페이저가 들어갈 자리 만들어주기
메인액티비티.xml에 viewpager태그를 사용해서 자리를 만들어줍니다
<?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"
tools:context=".MainActivity"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="16dp">
<Button
android:id="@+id/btn_fragment1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="fragement1"
android:layout_weight="1"
android:layout_marginRight="10dp"/>
<Button
android:id="@+id/btn_fragment2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="fragement2"
android:layout_weight="1"
android:layout_marginRight="10dp"/>
<Button
android:id="@+id/btn_fragment3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="fragement3"
android:layout_weight="1"
android:layout_marginRight="10dp"/>
</LinearLayout>
<androidx.viewpager2.widget.ViewPager2
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main_fragment"/>
</LinearLayout>
- 프래그먼트 xml 만들어주기
뷰페이저에 들어가 프래그먼트 xml을 만들어주겠습니다. 이름은fragement1.xml fragment2.xml fragement3.xml입니다.
#fragement1.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fragment1"
android:textColor="#FFFFFF"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:textSize="30dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
#fragment2.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fragment2"
android:textColor="#FFFFFF"
android:textSize="30dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
#fragment3.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fragment3"
android:textColor="#FFFFFF"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:textSize="30dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
- 프래그먼트 kt만들어주기
이제 각각 xml을 출력해주는 프래그먼트.kt를 만들어주겠습니다. 이름은 fragementOne.kt, fragmentTwo.kt fragementThree.kt 입니다.
#fragementOne.kt
package com.example.test
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
class fragementOne : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragement1, container, false)
return view
}
}
#fragementTwo.kt
package com.example.test
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
class fragementTwo : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragement2, container, false)
return view
}
}
#fragementThree.kt
package com.example.test
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
class fragementThree : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragement3, container, false)
return view
}
}
- 메인액티비티.kt에 뷰페이저 어댑터 및 버튼 클릭시 로직 설정
메인액티비티.kt에 뷰페이저의 어댑터를 만들고 등록하며 버튼 클릭시 뷰페이저 화면이 이동하는 로직을 설정해줍니다.
class MainActivity : AppCompatActivity() {
//뷰페이저 어댑터
class MyFragmentStateAdapter(activity: FragmentActivity) : FragmentStateAdapter(activity) {
val fragements: List<Fragment>
init {
fragements = listOf(fragementOne(), fragementTwo(), fragementThree())
}
override fun getItemCount(): Int {
return fragements.size
}
override fun createFragment(position: Int): Fragment {
return fragements[position]
}
}
//메인액티비티 출력
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding =
ActivityMainBinding.inflate(layoutInflater) //activity_main_xml 파일의 객체들을 가져옵니다.
setContentView(binding.root) //activity_main_xml을 화면에 출력합니다.
//뷰페이저 어댑터 등록
binding.mainFragment.adapter = MyFragmentStateAdapter(this)
//버튼누르면 그 버튼에따라 뷰페이저 전환
binding.btnFragment1.setOnClickListener(){
binding.mainFragment.setCurrentItem(0)
}
binding.btnFragment2.setOnClickListener(){
binding.mainFragment.setCurrentItem(1)
}
binding.btnFragment3.setOnClickListener(){
binding.mainFragment.setCurrentItem(2)
}
}
}
- 실행
'Programming > Kotlin - Android' 카테고리의 다른 글
안드로이드 앱 프로그래밍 - 17(머터리얼 라이브러리) (0) | 2023.01.27 |
---|---|
안드로이드 앱 프로그래밍 - 16(제트팩 라이브러리 - 드로어 레이아웃) (0) | 2023.01.26 |
안드로이드 앱 프로그래밍 - 14(제트팩 라이브러리 - 리사이클러뷰) (0) | 2023.01.19 |
안드로이드 앱 프로그래밍 - 13(제트팩 라이브러리 - 프래그먼트) (0) | 2023.01.19 |
안드로이드 앱 프로그래밍 - 12(제트팩 라이브러리 - appcompat) (0) | 2023.01.18 |
Comments