ViewPager 中遇到的问题

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)

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容