使用view pager android获取Fragment已经激活的错误

时间:2018-02-16 10:30:44

标签: android android-viewpager kotlin

我正在尝试制作动态循环视图寻呼机适配器(我想动态地从适配器添加删除页面)但是从最后一页转到第二页时我收到错误。

我的适配器类是:

class UpCommingEventAdapter(fragmentManager: FragmentManager, val mFragmentList: ArrayList<UpcommingEventsFragment>) : FragmentStatePagerAdapter
(fragmentManager) {
    override fun getItem(position: Int): Fragment {
        return when (position) {
            0 -> {
                mFragmentList[mFragmentList.size - 1]
            }
            mFragmentList.size + 1 -> {
                UpcommingEventsFragment.newInstance("0")
            }
            else -> {
                when (position) {
                    1 -> {
                        UpcommingEventsFragment.newInstance("0")
                    }
                    else -> {
                        mFragmentList[position - 1]
                    }
                }
            }
        }
    }

    fun removeFragmnet(tag: String) {
        for (i in 0 until mFragmentList.size) {
            if (mFragmentList[i].ftag == tag) {
                mFragmentList.removeAt(i)
                this.notifyDataSetChanged()
                break
            }
        }
        this.notifyDataSetChanged()
    }

    override fun getPageTitle(position: Int): CharSequence {
        return "Page " + position
    }

    override fun getCount(): Int {
        val itemsSize = mFragmentList.size
        return if (itemsSize > 1) itemsSize + 2 else itemsSize
    }

    override fun getItemPosition(`object`: Any): Int {
        return PagerAdapter.POSITION_NONE
    }
}

我正在传递片段列表,我收到以下错误:

java.lang.IllegalStateException: Fragment already active
    at android.support.v4.app.Fragment.setInitialSavedState(Fragment.java:519)
at android.support.v4.app.FragmentStatePagerAdapter.instantiateItem(FragmentStatePager
at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1004)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1186)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1086)
at android.support.v4.view.ViewPager$3.run(ViewPager.java:267)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:927)
at android.view.Choreographer.doCallbacks(Choreographer.java:702)
at android.view.Choreographer.doFrame(Choreographer.java:635)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:913)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)                                                                        

1 个答案:

答案 0 :(得分:0)

我认为

else -> {
     mFragmentList[position - 1]
}

应该是

else -> {
     mFragmentList[position]
}