Не удается обновить фрагменты в FragmentPagerAdapter
Я написал следующий код для FragmentPagerAdapter
настроить ViewPager.
class ViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager) {
private val mFragmentList = ArrayList<Fragment>()
private val mFragmentTitleList = ArrayList<String>()
override fun getItem(position: Int): Fragment = mFragmentList[position]
override fun getCount(): Int = mFragmentList.size
fun addFragment(fragment: Fragment, title: String) {
mFragmentList.add(fragment)
mFragmentTitleList.add(title)
}
fun addFragment(fragment: Fragment) {
mFragmentList.add(fragment)
}
override fun getPageTitle(position: Int): CharSequence = mFragmentTitleList[position]
}
А в Activity у меня есть следующий метод для настройки пейджера представлений.
private fun setupViewPager(viewPager: ViewPager, dataList: List<CholesterolMonthlySummary>) {
Log.i(TAG, "Size of the dataList passing through setupViewPager is ${dataList.size}")
val adapter = ViewPagerAdapter(supportFragmentManager)
adapter.addFragment(CholesterolPagingFragment.newInstance(ArrayList(dataList), CHOL))
adapter.addFragment(CholesterolPagingFragment.newInstance(ArrayList(dataList), LDL))
adapter.addFragment(CholesterolPagingFragment.newInstance(ArrayList(dataList), HDL))
adapter.addFragment(CholesterolPagingFragment.newInstance(ArrayList(dataList), TRIG))
viewPager.adapter = adapter
}
Когда приходит новый набор данных, я снова вызываю вышеуказанный метод и снова меняю адаптер, но мои представления, которые уже были созданы, не обновляются. Обновляются только те виды, которые не были созданы.
Я даже пытался notifyDataSetChange()
добавление следующего кода в Adapter, но это также не работает.
override fun getItemPosition(`object`: Any?): Int = FragmentPagerAdapter.POSITION_NONE
1 ответ
Вы можете попробовать позвонить adapter.notifyDataSetChanged()
непосредственно, когда вы хотите обновить вид.
И, возможно, вам нужно очистить mFragmentList
а также mFragmentTitleList
перед тем как вставить новые данные?