FragmentPagerAdapter 在调用 notifyDataSetChanged 后不会从 0 开始位置

Posted

技术标签:

【中文标题】FragmentPagerAdapter 在调用 notifyDataSetChanged 后不会从 0 开始位置【英文标题】:FragmentPagerAdapter doesn't start position from 0 after call notifyDataSetChanged 【发布时间】:2017-08-30 15:54:00 【问题描述】:

我有一个简单的 FragmentPagerAdapter 类

    public class SectionsPagerAdapter extends FragmentPagerAdapter 

    public SectionsPagerAdapter(FragmentManager fm) 
        super(fm);
    

    @Override
    public Fragment getItem(int position) 
        PagerAdapter fragment;
                fragment = new PagerAdapter(data.get(position));

        return fragment;
    


    @Override
    public int getCount() 
    return data.size();
    

    @Override
    public CharSequence getPageTitle(int position) 
        if (position >= pageCount || position < 0)
            return null;
        return "Profile " + position;
    


PagerAdapter 是一个从 Fragment 扩展而来的简单类。 然后我将 SectionsPagerAdapter 的实例设置为我的 ViewPager。

问题来了:

起初我在view pager上有一个页面(数据大小为1),当我得到更多数据时,我调用SectionsPagerAdapter实例notifyDataSetChanged,但是在getItem(int position)方法中而不是位置开始形式0,它从1开始!!!

我该怎么办?获得更多数据后,我想重新创建视图寻呼机 提前致谢

【问题讨论】:

再次设置适配器而不是 notifyDataSetChanged 你需要设置adapter重置位置,notifyDataSetChanged用于通知adapter有数据变化,所以它只重新绑定数据。 另一个你可以使用 viewPager.setCurrentItem(0); @NiranjPatel pervious 适配器?还是新实例?谢谢你:) 【参考方案1】:

您需要重新设置适配器才能重置位置,notifyDataSetChanged用于通知适配器有数据更改,因此它只重新绑定数据。

或者您可以使用此代码将视图寻呼机移动到您想要的位置

viewPager.setCurrentItem(0);

【讨论】:

我必须在 notifyDataSetChanged() 之后或之前调用 viewPager.setCurrentItem(0) 吗?另一个问题是,我必须获取另一个适配器实例并再次设置它以查看寻呼机,还是可以再次设置以前的? 两者都可以使用,看你的需求。【参考方案2】:

notifyDataSetChanged() 只会通知任何已注册的观察者数据集已更改,而不管 viewPager 位置如何。

有两类不同的数据变化事件,项目变化 和结构变化。项目更改是指单个项目有其 数据已更新,但没有发生位置变化。结构 更改是在数据中插入、删除或移动项目时 设置。

您必须在 notifyDataSetChanged() 之后手动设置 viewPager 的位置(位置 0)。

adapter.notifyDataSetChanged();
viewPager.setCurrentItem(0);

【讨论】:

接受 Nithinlal 因为是第一个答案,无论如何谢谢你:)

以上是关于FragmentPagerAdapter 在调用 notifyDataSetChanged 后不会从 0 开始位置的主要内容,如果未能解决你的问题,请参考以下文章

如何在 fragmentPagerAdapter 中调用 getItem(int position)?

使用 FragmentPagerAdapter 时不调用 Fragment onResume()

FragmentPagerAdapter与FragmentStatePagerAdapter区别

109FragmentPagerAdapter与FragmentStatePagerAdapter区别

FragmentPagerAdapter与FragmentStatePagerAdapter区别

FragmentPagerAdapter与FragmentStatePagerAdapter区别