0

I have used FragmentStatePagerAdapter for Viewpager and It's working fine if I set adapter before api call. If I set adapter after some time I getting exception(I set adapter only once).

I don't know actually what's exact issue and solution.

Kindly check below code for reference

Adapter :

class MyPagerAdapter(
    private val context: Context,
    fm: FragmentManager,
    private val event: EventInfoResponse
) :
    FragmentPagerAdapter(fm,
        BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
    ) {
    private val fragmentsList = arrayListOf<Fragment>()
    val fragmentTitleList = arrayListOf<String>()


    override fun getItem(position: Int): Fragment {
        return when (position) {
            0 -> Fragment1.newInstance(event)
            else -> Fragment2.newInstance(event.id!!)
        }
    }

    override fun getCount(): Int {
        return 2
    }

    override fun getPageTitle(position: Int): CharSequence? {
        return when (position) {
            0 -> "title 1"
            else -> "title 2"
        }
    }
}

Applying adapter :

 vpEvent.apply {
            adapter = MyPagerAdapter(requireContext(),childFragmentManager,event!!)
            tlEvent.setupWithViewPager(this)
        }

Exception :

 java.lang.IllegalStateException: Fragment already added: Fragment1{9b6bafd (10e16e31-8262-4161-aeff-c78e1180030f) id=0x7f0a065f android:switcher:2131363423:0}
        at androidx.fragment.app.FragmentManagerImpl.addFragment(FragmentManagerImpl.java:1379)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:399)
        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)
Jake Lee
  • 7,549
  • 8
  • 45
  • 86
Rajasekaran M
  • 2,478
  • 2
  • 20
  • 30

1 Answers1

0

The issue is you directly instance Fragment in Adapter. you should create instance of fragment outside from Adapter and inject to Adapter and via getItem() method introduce ‍‍‍‍‍‍‍created Fragment to Adapter.

ImanX
  • 789
  • 6
  • 23