首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在viewPager中用按钮切换页面?

如何在viewPager中用按钮切换页面?
EN

Stack Overflow用户
提问于 2021-10-08 06:10:22
回答 1查看 102关注 0票数 0

我有一个对话框片段,其中包含一个带有四个片段的viewpager。使用swipe可以很好地在这些片段之间进行导航,但我想通过片段上的一个按钮来更改片段。

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

我有这个:

代码语言:javascript
复制
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

代码语言:javascript
复制
<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>

适配器

代码语言:javascript
复制
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()
        }
    }
}

这是带有按钮的片段,我想切换到下一个片段

代码语言:javascript
复制
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 
        }

    }
}

很抱歉,如果代码太多了,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-08 17:04:09

DialogFragmentContainer是ViewPager页面片段的父片段;也就是说,它是Step1到Step4片段的父片段。

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

代码语言:javascript
复制
binding.btnNext.setOnClickListener{ 
    //I want to change fragment here 
    (parentFragment as DialogFragmentContainer).binding.pager.currentItem = myItemPosition
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69491236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档