首页 > 解决方案 > 如何在不滚动到第一页的情况下更新 ViewPager 中的单页内容?

问题描述

我想更新 a 中的特定页面ViewPager,并停留在该页面上而不滚动到第一页

我试图更新数据列表并调用notifyDataSetChanged(),但它滚动到第一页,ViewPager没有notifyItemChanged()as RecyclerView

标签: androidkotlinandroid-viewpager

解决方案


一些代码将有助于更好地理解问题,显示您在页面上尝试更新的内容以及您正在调用notifyDataSetChanged()的内容。

您的问题和评论是两个独立的问题。

  1. 你在 Tab Y 并且你想更新 Tab Y

  2. 您在 Tab X 上,并且您想在更改为 Tab Y 时更新它。

通常对于问题 1,这可以在该选项卡(页面)的代码中处理

一般来说,对于问题 2,如果您想在移动到页面时执行某些操作,那么您需要添加一个OnPageChangeListener,但这可能只是您需要执行的更新选项卡(页面)的开始。

https://developer.android.com/reference/android/support/v4/view/ViewPager.OnPageChangeListener.html#onPageSelected(int)

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {

                if (position == 1 || position == 2)
                {
                    // do something here
                }

                if (position == 0)
                {
                    // do something else
                }
            }
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                // Code goes here
            }
            @Override
            public void onPageScrollStateChanged(int state) {
                // Code goes here
            }
        });

但是也没有代码,我无法判断您是否已经以某种方式实现了适配器,允许它在当前页面处于活动状态时notifyDataSetChanged()

https://developer.android.com/reference/androidx/viewpager/widget/PagerAdapter.html#top_of_page

PagerAdapter 支持数据集更改。数据集更改必须在主线程上发生,并且必须以调用 notifyDataSetChanged() 结束,类似于从 BaseAdapter 派生的 AdapterView 适配器。数据集更改可能涉及添加、删除或更改位置的页面。如果适配器实现 getItemPosition(Object) 方法,ViewPager 将保持当前页面处于活动状态。


推荐阅读