【问题标题】:ViewPager CurrentItem Fragment not refreshViewPager CurrentItem 片段不刷新
【发布时间】:2017-02-02 16:11:44
【问题描述】:

我实现了一个由 3 个片段 (0,1,2) 组成的 ViewPager。当我执行 setCurrentItem(1) 时,它会显示好的片段但不刷新片段。 如果我手动从标签 3 滑动到标签 2,它会很好地刷新。 非常感谢您的帮助,我被困了一个星期。

Oncreate()
pager = (ViewPager) findViewById(R.id.pager);
        pager.setAdapter(mViewPagerAdapter);
        pager.setCurrentItem(1,true);
        mViewPagerAdapter.notifyDataSetChanged();
        pager.setOnPageChangeListener(mPageChangeListener);
  }


private FragmentPagerAdapter mViewPagerAdapter = new  
FragmentPagerAdapter(getSupportFragmentManager()) {
    @Override
    public int getCount() {
        return TOTAL_PAGES;
    }

    // Return the Fragment associated with a specified position.
    @Override
    public Fragment getItem(int position) {
        if (position == 0) {
            return client_Option_fragment.newInstance();
        } else if (position == 1) {
            return Profil_fragment.newInstance();
        } else if (position == 2) {
            return client_Partenaire_fragment.newInstance();
        }

        return null;
    }



    @Override
    public void destroyItem(android.view.ViewGroup container, int position, 
Object object) {
        super.destroyItem(container, position, object);
    };

    @Override
    // To update fragment in ViewPager, we should override getItemPosition()     
method,
    // in this method, we call the fragment's public updating method.
    public int getItemPosition(Object object) {
        if (object instanceof client_Option_fragment) {
            ((client_Option_fragment) object).update();
        }
        if (object instanceof Profil_fragment) {
            ((Profil_fragment) object).update();
        }

        if (object instanceof client_Partenaire_fragment) {
            ((client_Partenaire_fragment) object).update();
        }

        return super.getItemPosition(object);
    };
};


   private ViewPager.OnPageChangeListener mPageChangeListener = new  
    ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int 
    positionOffsetPixels) {
    }

    @Override
    public void onPageSelected(int position) {
        mViewPagerAdapter.notifyDataSetChanged();
    }

    @Override
    public void onPageScrollStateChanged(int state) {
    }
};

编辑: 刚刚找到解决办法,我在OnPageScrolled()中添加了如下sn-p:

if (start){
mViewPagerAdapter.notifyDataSetChanged();
start=false;
}

【问题讨论】:

标签: android android-fragments android-viewpager


【解决方案1】:

viewpager 中的片段不是这样工作的。你需要在 getSupportFragmentManager() 中获取这些片段;

这是我已经做的例子..

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            // get all fragment in getSupportFragmentManager
            Fragment getFragment = getSupportFragmentManager().getFragments().get(position);
            // Better fragment getter use this below
            // Fragment page = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + position);

            if (getFragment instanceof PastEventFragment) {
                PastEventFragment thisFragment = (PastEventFragment) getFragment;
                thisFragment.refreshData();
            }

            else if (getFragment instanceof UpcomingEventFragment) {
                UpcomingEventFragment thisFragment = (UpcomingEventFragment) getFragment;
                thisFragment.refreshData();
            }

            else if (getFragment instanceof LikedEventListFragment) {
                LikedEventListFragment thisFragment = (LikedEventListFragment) getFragment;
                thisFragment.refreshData();
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

【讨论】:

  • 谢谢你的回答,我试过了,还是一样。事实上,我自动强制 ViewPager 使用 setCurrentItem(1) 显示 Fragment 2,但 Fragment 不会更新,因为没有 PageSelected 或滚动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-29
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
相关资源
最近更新 更多