「アンドロイド」ViewPager 2/ViewPager 2をTabLayoutに接続
ViewPager 2登场!!
なぜViewPager 2が現れたのですか?
ViewPager 2どちらがいいですか?
ViewPager 2は、変更可能な分割収集機能によってページングをサポートし、デフォルトの収集が変更されるとnotifyDataSetChanged()が呼び出されてUIが更新されます.
ViewPager 2はRecyclerViewに基づいて構築されているため、DiffUtilというユーティリティクラスにアクセスできます.
したがって、ViewPager 2オブジェクトは、RecyclerViewクラスのNotifyDataSetChanged()を利用することができる.
ViewPager 2の使用
1.依存関係の追加
2.スクリーン構成の分割、xmlの作成
3.メインアニメーションにViewPager 2ビューを追加する
4.メインモーションでAdapterを作成する
ViewPager 2新しいページを内蔵スライド機能で表示
このプロセスでは、FragmentStateAdapterが新しいページの表示を担当します.
FragmentStateAdapter
は、RecyclerViewのAdapter
が作成されたときもRecyclerViewであるAdapter
クラスを継承する.Adapter継承作成時のAdapter
と同じRecyclerViewのAdapterは内部にViewHolderを作成し、このFragmentStateAdapterも内部にFragmentViewHolderを指定します.
つまり、FragmentStateAdapterは、RecyclerViewで使用されているAdapterと似ています
https://developer.android.com/reference/androidx/viewpager2/adapter/FragmentStateAdapter#public-constructors_1
RecyclerViewは、AdapterでViewHolderを指定することによって実現され、ViewPager 2もFragmentStateAdapterでFragmentViewHolderを指定することによって実現される.
したがって,RecyclerViewとViewPager 2の動作原理は同じである.
ViewPager 2でAdapterを作成すると、FragmentStateAdapterが実装されますが、FragmentStateAdapterが所有する共通のメソッドでは、getItemCount()とCreateFragment()が実装される必要があります.
getItemCount():FragmentStateAdapterの共通メソッドではありません.FragmentStateAdapterが継承するRecyclerview.Adapterクラスの共通メソッド.このメソッドは、Adapterが所有するデータセットのすべてのアイテム数を返します.
createFragment():FragmentStateAdapterの共通メソッド.特定の位置に接続する新しい分割機能を提供する方法があります.
5.AdapterをViewPager 2に接続する
追加)Backボタンをクリックして画面スライドを過去に移動
TabをViewPager 2に関連付ける
依存関係の追加
implementation 'com.google.android.material:material:1.2.1'
TabLayoutの作成
TabLayoutを
TabLayoutとViewPager 2の接続
package My_Library
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.example.kotlin_study.R
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import kotlinx.android.synthetic.main.activity_view_pager2.*
class ViewPager2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_view_pager2)
//ViewPager2와 Adapter연결
val adapter = ViewPager2_Adapter(this, 3)
viewPager2.adapter = adapter
//각 탭들이 눌렸을때 작업할 수 있는 기반 코드
//(없어도 무관하긴함) ViewPager2_tab_layout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabReselected(tab: TabLayout.Tab?) {
// handle tab reselect
}
override fun onTabUnselected(tab: TabLayout.Tab?) {
// handle tab unselect
}
override fun onTabSelected(tab: TabLayout.Tab?) {
// handle tab select
Toast.makeText(applicationContext, "탭 눌림", Toast.LENGTH_SHORT).show()
}
})
//ViewPager와 Tab을 연결
TabLayoutMediator(ViewPager2_tab_layout, viewPager2) { tab, position ->
when (position) {
0 -> tab.text = "탭1" //탭의 이름이 됨
1 -> tab.text = "탭2"
2 -> tab.text = "탭3"
}
}.attach()
}
// 추가 기능 ) back 버튼 클릭시 화면 슬라이드 과거로 이동시키기
override fun onBackPressed() {
if (viewPager2.currentItem == 0) {
super.onBackPressed()
} else {
viewPager2.currentItem = viewPager2.currentItem - 1
}
}
//ViewPager2의 Adapter
class ViewPager2_Adapter(
fragmentActivity: FragmentActivity,
val count: Int
) : FragmentStateAdapter(fragmentActivity) {
override fun getItemCount(): Int {
return 3
}
override fun createFragment(position: Int): Fragment {
if (position == 0) {
return ViewPager2_Fragment1()
} else if (position == 1) {
return ViewPager2_Fragment2()
} else {
return ViewPager2_Fragment3()
}
}
}
}
Reference
この問題について(「アンドロイド」ViewPager 2/ViewPager 2をTabLayoutに接続), 我々は、より多くの情報をここで見つけました https://velog.io/@dabin/안드로이드ViewPager2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol