Я столкнулся с проблемой, с которой никогда не сталкивался.
Я использую ViewPager с вкладками для отображения разных фрагментов. Некоторые вкладки отображаются в зависимости от параметра, который я передаю моему адаптеру ViewPager. Вот мой адаптер:
class MyPagerAdapter(
supportFragmentManager: FragmentManager,
private val value: Boolean
) : FragmentPagerAdapter(supportFragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
private val fragmentPages: MutableList<Fragment> = mutableListOf()
init {
fragmentPages.add(FirstFragment.newInstance())
fragmentPages.add(SecondFragment.newInstance())
if (value) {
fragmentPages.add(ThirdFragment.newInstance())
}
}
override fun getItem(position: Int): Fragment {
return fragmentPages[position]
}
override fun getCount(): Int {
return fragmentPages.size
}
}
Проблема заключается в том, что в моей деятельности, содержащей этот ViewPager, у меня есть Spinner, который в зависимости от выбранного значения обновляет адаптер ViewPager и представление моего фрагмента. загружается дважды. В FirstFragment, который всегда загружается, я выбираю данные из API и вставляю их в RecyclerView. Таким образом, я получаю дубликаты загруженных данных в моем RecyclerView, потому что метод, который загружает данные из API, который вызывается в onCreateView, вызывается дважды.
Вот мой код слушателя Spinner, который вызывается в onCreate моего Activity
mySpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
override fun onNothingSelected(parent: AdapterView<*>?) {}
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
val value = position > 1
adapter = MyPagerAdapter(supportFragmentManager, value)
viewPager.adapter = adapter
}
}
mySpinner.setSelection(0)