AndroidStudioのNew ProjectでTabbed Activityを選択したら
ViewPager2でなくViewPagerのサンプルが出来上がった
いや、いや、ViewPager2にしてくださいよ
と思いサンプルコードを書いてみた
・MainActivity
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val sectionsPagerAdapter = SectionsPagerAdapter(this) view_pager.adapter = sectionsPagerAdapter TabLayoutMediator(tabs, view_pager) { tab, position -> tab.text = "TAB ${(position + 1)}" }.attach() } }
・activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.coordinatorlayout.widget.CoordinatorLayout 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"> <androidx.viewpager2.widget.ViewPager2 android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> <com.google.android.material.appbar.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <androidx.appcompat.widget.Toolbar android:layout_width="match_parent" android:layout_height="?actionBarSize" app:title="@string/app_name" /> <com.google.android.material.tabs.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" /> </com.google.android.material.appbar.AppBarLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>
・SectionsPagerAdapter
class SectionsPagerAdapter(fm: FragmentActivity) : FragmentStateAdapter(fm) { override fun createFragment(position: Int): Fragment = PlaceholderFragment.newInstance(position + 1) override fun getItemCount(): Int { return 2 } }
・PlaceholderFragment
class PlaceholderFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val root = inflater.inflate(R.layout.fragment_main, container, false) val textView: TextView = root.findViewById(R.id.section_label) textView.text = arguments?.getInt(ARG_SECTION_NUMBER, 0).toString() return root } companion object { private const val ARG_SECTION_NUMBER = "section_number" fun newInstance(sectionNumber: Int): PlaceholderFragment { return PlaceholderFragment().apply { arguments = Bundle().apply { putInt(ARG_SECTION_NUMBER, sectionNumber) } } } } }
・fragment_main.xml
<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:id="@+id/constraintLayout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ui.main.PlaceholderFragment"> <TextView android:id="@+id/section_label" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:textSize="36sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" tools:text="1" /> </androidx.constraintlayout.widget.ConstraintLayout>