ViewPager抛出片段已通过编程方式更改页面时添加了错误

问题描述 投票:0回答:1

我正在尝试以编程方式更改viewPager中的页面,但即使我不尝试添加新的片段,也一直收到错误片段已添加的错误。

class PagerFragment: Fragment() {

    /**
     * Pages
     */ 
    private val pageOneFragment = PageOneFragment()
    private val pageTwoFragment = PageTwoFragment()
    private val pageThreeFragment = PageThreeFragment()

    /**
     * Life Cycle
     */
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.pager_fragment, container, false)
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        viewPager.adapter = activity?.let { PagerAdapter(it.supportFragmentManager) }
        viewPager.setListeners()
    }

    /**
     * Inner Class
     */
    private inner class PagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm) {
        override fun getItem(position: Int): Fragment {
            when (position) {
                0 -> return pageOneFragment
                1 -> return pageTwoFragment
                2 -> return pageThreeFragment
                else -> throw IllegalStateException("Pager position $position is out of bounds.")
            }
        }

        override fun getCount(): Int {
            return 3
        }
    }

    /**
     * Class Methods
     */
    fun previousPage() {
        view?.hideKeyboard()
        if (viewPager.currentItem == 0) return
//        var previousPageIndex = viewPager.currentItem - 1
//        viewPager.setCurrentItem(previousPageIndex)
        viewPager.arrowScroll(View.FOCUS_LEFT)
    }

    fun nextPage() {
        view?.hideKeyboard()
        if (viewPager.currentItem == viewPager.adapter!!.count - 1) return
//        var nextPageIndex = viewPager.currentItem + 1
//        viewPager.setCurrentItem(nextPageIndex)
        viewPager.arrowScroll(View.FOCUS_RIGHT)
    }

    /**
     * Extensions
     */
    fun ViewPager.setListeners() {

        // On Page Change Listener
        this.addOnPageChangeListener(object: ViewPager.OnPageChangeListener {
            override fun onPageScrollStateChanged(p0: Int) {

            }

            override fun onPageScrolled(p0: Int, p1: Float, p2: Int) {
                when (p0) {
                    0 -> { }
                    1 -> { }
                    2 -> { }
                    else -> { }
                }
            }

            override fun onPageSelected(p0: Int) { }
        })
    }

}

class MyViewPager(context: Context, attrs: AttributeSet): ViewPager(context, attrs) {
    private var swipeEnabled = false

    override fun onTouchEvent(ev: MotionEvent?): Boolean {
        return when (swipeEnabled) {
            true -> super.onTouchEvent(ev)
            false -> false
        }
    }

    override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
        return when (swipeEnabled) {
            true -> super.onInterceptTouchEvent(event)
            false -> false
        }
    }

    fun setSwipePagingEnabled(swipeEnabled: Boolean) {
        this.swipeEnabled = swipeEnabled
    }
}

这正是我的viewpager的设置方式。当我尝试调用函数previousPagenextPage时,出现错误“片段已添加”。我到处都在研究如何以编程方式更改说使用setCurrentItem的页面,这给了我同样的错误。...

如何在不出现该错误的情况下以编程方式更改页面?

android android-fragments android-viewpager
1个回答
0
投票

您的问题是您尚未调用superFragmentStatePagerAdapter函数。

© www.soinside.com 2019 - 2024. All rights reserved.