【问题标题】:How to change page with button in viewPager?如何在 viewPager 中使用按钮更改页面?
【发布时间】:2021-11-28 03:21:51
【问题描述】:

我有一个对话框片段,其中包含一个带有四个片段的 viewpager。这些片段之间的导航可以通过滑动正常工作,但我想通过片段上的按钮来更改片段。

我发现我必须使用setCurrentItem(int iten)。但我不知道如何在不同的片段中使用,其中包含带有 viewpager 的 xml。

我有这个:

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 
        }

    }
}

对不起,如果代码太多,谢谢!

【问题讨论】:

  • 我不知道如何调用 pager.setCurrentItem(int item) 因为我在另一个片段中,它有不同的 xml 文件。 viewpager 是片段容器 xml

标签: android kotlin android-fragments android-viewpager android-dialogfragment


【解决方案1】:

DialogFragmentContainer是ViewPager页面片段的父片段;即它是 Step1 到 Step4 片段的父级。

因此您可以从Step1 片段访问它,您要使用parentFragment 属性更改当前ViewPager 页面的片段:

binding.btnNext.setOnClickListener{ 
    //I want to change fragment here 
    (parentFragment as DialogFragmentContainer).binding.pager.currentItem = myItemPosition
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多