1. 调用 notifyDataSetChanged() 不刷新
在 Adapter 中重写 getItemPosition(`object`:Any) 方法:
/**
* 解决 viewpager 在刷新调用 notifyDataSetChanged 不起作用
* 如果 item 的位置如果没有发生变化,则返回 POSITION_UNCHANGED
* 如果返回了 POSITION_NONE,表示该位置的 item 已经不存在了
* 默认的实现是假设 item 的位置永远不会发生变化,而返回 POSITION_UNCHANGED
*/
override fun getItemPosition(`object`:Any):Int {
return POSITION_NONE
}
2. 设置了 clipChildren = false 后调用 notifyDataSetChanged() 两边页面未显示
重新设置 clipChildren。
3. 如何获取设置了 PagerAdapter 的 ViewPager 的当前页面 View?
在重写 PagerAdapter 的 instantiateItem 方法中,设置返回的 view.tag = position,
然后调用 viewPager 的 findViewWithTag<View>(currentItem) 即可获取到对应的 View:
abstract class BasePagerAdapter<D>(val context: Context, protected val dataList: List<D>) : PagerAdapter() {
***
override fun instantiateItem(container: ViewGroup, position: Int): Any {
val view = createView(position)
view.tag = position
container.addView(view) return view
}
***
}
fun ViewPager.getCurrentView() = with(this) {
if (adapter !is BasePagerAdapter<*>) {
return@with null
}
findViewWithTag<View>(currentItem)
}