如何在 viewPager 中使用按钮更改页面?
How to change page with button in viewPager?
我有一个对话框片段,其中包含一个带有四个片段的 viewpager。这些片段之间的导航可以通过滑动正常工作,但我想更改片段,用片段上的按钮。
我发现我必须使用setCurrentItem(int iten)
。但我不知道如何在不同的片段中使用,其中包含 xml 和 viewpager.
我有这个:
class DialogFragmentContainer: DialogFragment() {
lateinit var binding: DialogFragmentContainerBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DialogFragmentContainerBinding.inflate(layoutInflater)
if(dialog != null && dialog!!.window != null){
dialog!!.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
}
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val viewPagerAdapter = ViewPagerAdapter(this)
val viewPager = binding.pager
viewPager.adapter = viewPagerAdapter
}
}
和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:layout_width="wrap_content"
android:layout_height="wrap_content">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
适配器
class ViewPagerAdapter(fragment: Fragment): FragmentStateAdapter(fragment) {
override fun getItemCount(): Int {
return 4
}
override fun createFragment(position: Int): Fragment {
return when(position){
0 -> Step1()
1 -> Step2()
2 -> Step3()
3 -> Step4()
else -> Step1()
}
}
}
这是带有按钮的片段,我想在此处切换到下一个片段
class Step1(): Fragment() {
lateinit var binding: Step1FragmentBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = Step1FragmentBinding.inflate(layoutInflater)
return binding.root
}
override fun onStart() {
super.onStart()
binding.btnNext.setOnClickListener{
//I want to change fragment here
}
}
}
抱歉,如果代码太多,谢谢!
DialogFragmentContainer
是ViewPager页面片段的父片段;即它是 Step1 到 Step4 片段的父级。
因此您可以从 Step1
片段访问它,您想要使用 parentFragment
属性更改当前 ViewPager 页面的片段:
binding.btnNext.setOnClickListener{
//I want to change fragment here
(parentFragment as DialogFragmentContainer).binding.pager.currentItem = myItemPosition
}
我有一个对话框片段,其中包含一个带有四个片段的 viewpager。这些片段之间的导航可以通过滑动正常工作,但我想更改片段,用片段上的按钮。
我发现我必须使用setCurrentItem(int iten)
。但我不知道如何在不同的片段中使用,其中包含 xml 和 viewpager.
我有这个:
class DialogFragmentContainer: DialogFragment() {
lateinit var binding: DialogFragmentContainerBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DialogFragmentContainerBinding.inflate(layoutInflater)
if(dialog != null && dialog!!.window != null){
dialog!!.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
}
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val viewPagerAdapter = ViewPagerAdapter(this)
val viewPager = binding.pager
viewPager.adapter = viewPagerAdapter
}
}
和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:layout_width="wrap_content"
android:layout_height="wrap_content">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
适配器
class ViewPagerAdapter(fragment: Fragment): FragmentStateAdapter(fragment) {
override fun getItemCount(): Int {
return 4
}
override fun createFragment(position: Int): Fragment {
return when(position){
0 -> Step1()
1 -> Step2()
2 -> Step3()
3 -> Step4()
else -> Step1()
}
}
}
这是带有按钮的片段,我想在此处切换到下一个片段
class Step1(): Fragment() {
lateinit var binding: Step1FragmentBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = Step1FragmentBinding.inflate(layoutInflater)
return binding.root
}
override fun onStart() {
super.onStart()
binding.btnNext.setOnClickListener{
//I want to change fragment here
}
}
}
抱歉,如果代码太多,谢谢!
DialogFragmentContainer
是ViewPager页面片段的父片段;即它是 Step1 到 Step4 片段的父级。
因此您可以从 Step1
片段访问它,您想要使用 parentFragment
属性更改当前 ViewPager 页面的片段:
binding.btnNext.setOnClickListener{
//I want to change fragment here
(parentFragment as DialogFragmentContainer).binding.pager.currentItem = myItemPosition
}