我正在尝试以编程方式更改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的设置方式。当我尝试调用函数previousPage
或nextPage
时,出现错误“片段已添加”。我到处都在研究如何以编程方式更改说使用setCurrentItem
的页面,这给了我同样的错误。...
如何在不出现该错误的情况下以编程方式更改页面?
您的问题是您尚未调用super
的FragmentStatePagerAdapter
函数。