Skip to content Skip to sidebar Skip to footer

Fragmentpageradapter Throwing Illegalargumentexception - Fragment Already Added

I have a ViewPager and a TabLayout containing 3 Fragments. At times when I swipe through(with the help of ViewPager) the 3 Fragments, an IllegalArgumentException is thrown with a m

Solution 1:

I think, you shouldn't hold references to fragments outside of adapter. They should be created inside the adapter. Probably the adapter can be written this way:

classFragmentStateViewPagerAdapter(
    privateval tabTitles: List<String>,
    fragmentManager: FragmentManager
) : FragmentStatePagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {

    privateval tabs: List<Fragment> = (tabTitles.indices).map { YourFragment.newInstance(it) }

    overridefungetCount(): Int = tabTitles.size

    overridefungetItem(position: Int): Fragment = tabs[position]

    overridefungetPageTitle(position: Int): CharSequence {
        // Generate a title depending on the position.return tabTitles[position]
    }
}

But your example also works. Maybe more code is required. Also strangely BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT is not required in my case (it shows error, but must not).

classMainActivity : AppCompatActivity() {

    privatelateinitvar adapter: FragmentViewPagerAdapter

    overridefunonCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val titledFragments = (1..3).map { TitledFragment(PlusOneFragment(), it.toString()) }
        adapter = FragmentViewPagerAdapter(titledFragments, supportFragmentManager)
        with(view_pager) {
            adapter = this@MainActivity.adapter
        }
    }
}

Post a Comment for "Fragmentpageradapter Throwing Illegalargumentexception - Fragment Already Added"