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"