我有一个简单的FragmentPagerAdaper
,我已经覆盖了getItem
和getCount
方法。
在更改数据之前,一切正常。
即使在致电notifyDataSetChanged
后,ViewPager
也会显示旧片段,即使很难,我也不会将其归还getItem
。
Kotlin代码:
private inner class Adapter(fragmentManager: FragmentManager) : FragmentPagerAdapter(fragmentManager) {
override fun getItem(position: Int): Fragment {
when (getType(position)) {
Constants.CHAT_TYPE_PARTNER -> {
return TaskChatFragment.newInstance(...)
}
Constants.CHAT_TYPE_SUPPORT -> {
return TaskChatFragment.newInstance(...)
}
}
throw IllegalArgumentException("invalid position " + position)
}
fun getPosition(type: Int) =
if (type == Constants.CHAT_TYPE_SUPPORT && shouldShowPartnerChat()) 1 else 0
override fun getCount(): Int {
var count = 0
if (shouldShowPartnerChat()) count++
if (shouldShowSupportChat()) count++
return count
}
}
答案 0 :(得分:0)
除了2种方法之外,我还需要覆盖getItemId
,因为我正在更改getItem
返回的片段的位置。如文档中所述:
long getItemId (int position)
在给定位置返回项目的唯一标识符。
默认实现返回给定的位置。 如果项目的位置可以更改,则子类应覆盖此方法。
/**
* We need to override this as positions of items may change.
*
* Like when the partner conv is hidden.
*/
override fun getItemId(position: Int) = getType(position).toLong()
我在使用断点进行调试后发现了这一点,并意识到在调用getItem
之后没有调用notifyDataSetChanged