1. JetPack
2. 종류
1. Fragment
2. Fragment 사용 이유
1) 화면이 복잡한 경우
2) 화면 전환
3. Fragment 사용 방법
1) Fragment 상속
class OneFragment: Fragment() {
}
2) 레이아웃 등록
<fragment
android:name="com.example.OneFragment"
android:id="@+id/fragmentView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
4. 동적으로 Fragment 출력
val fragmentManager: FragmentManagre = supportFragmentManager
val transaction: FragmentTransaction = fragmentManager.beginTransaction()
transaction.add(R.id.fragment_content, oneFragment)
transaction.commit()
1. RecyclerView
ListView | RecyclerView |
---|---|
platform에서 제공하는 표준 api | androidx에서 제공 |
필수요소 : Adapter | 필수요소 : Adapter, ViewHolder, LayoutManager |
목록화면 커스터마이징 어려움 | 목록화면 커스터마이징 쉬움 |
아이템 생성시 뷰바인딩을 계속해 성능저하 발생 | 아이템 생성시 뷰바인딩 한번만 하고 이후에는 아이템 생성할 때 바인딩 된 뷰 객체를 재활용 |
2. RecyclerView 사용 방법
1) ViewHolder 작성
class MyViewHolder(val binding: ItemMainBinding): RecyclerView.ViewHolder(binding.root)
2) Adapter 작성
class MyAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun getItemCount(): Int {
TODO("Not yet implemented")
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
TODO("Not yet implemented")
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int): Int {
TODO("Not yet implemented")
}
}
3) LayoutManager과 Adapter 등록
binding.recycler.layoutManager = LinearLayoutManager(this)
binding.recycler.adapter = MyAdapter(datas)
1. ViewPager2
2. ViewPager2 사용 방법
1) build.gradle 추가
implementation 'androidx.viewpager2:viewpager2:1.0.0'
2) 레이아웃 등록
<androidx.viewpager2.widget.ViewPager2 xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
3) Adapter 작성
① RecyclerView.Adapter
class MyPagerViewHolder(val binding: ItemPagerBinding): RecyclerView.ViewHolder(binding.root)
class MyPagerAdapter(val datas: MutableList<String>): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun getItemCount(): Int {
return datas.size
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder =
MyPagerViewHolder(ItemPagerBinding.inflate(LayoutInflater.from(parent.context), parent, false))
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int): Int {
}
}
② FragmentStateAdapter (common)
class MyFragmentPagerAdapter(activity: FragmentActivity): FragmentStateAdapter(activity){
val fragments: List<Fragment>
init{
fragments = listOf(OneFragment(), TwoFragment(), ThreeFragment())
Log.d("minha-fragment", "fragments size: ${fragments.size}")
}
override fun getItemCount(): Int = fragments.size
// 매개변수에 들어가는 인덱스에 해당하는 fragment 출력
override fun createFragment(position: Int): Fragment = fragments[position]
4) 화면 방향 조정
binding.viewpager.orientation = ViewPager2.ORIENTATION_VERTICAL