简体   繁体   中英

Updates only the current page in ViewPager

Using ViewPager. To couse of method notifyDataSetChanged() for adapter PageStateAdapter, updates all pages. How it can updates only the current page in ViewPager?

onCreateView:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View myView = inflater.inflate(R.layout.my_layout, container, false);
    MyPageAdapter myAdapter = new MyPageAdapter(getChildFragmentManager(), true);
    ViewPager myPager = (ViewPager) myView.findViewById(R.id.my_pager);
    myPager.setAdapter(myAdapter);
    myPager.setCurrentItem(0);
}

PageAdapter:

//
    private class MyPagerAdapter extends FragmentStatePagerAdapter {
        private MyFragment[] fragments;


        public MyPagerAdapter(FragmentManager fm) {
            super(fm);

            fragments = new MyFragment[] { new Fragment1(), new Fragment2(), new Fragment3() };
        }

        @Override
        public Fragment getItem(int i) {
            return fragments[i];
        }

        @Override
        public int getCount() {
            return fragments.length;
        }

        @Override
        public void restoreState(Parcelable state, ClassLoader loader) {

        }
    }
//

To find current page add addTab() method in your adapter class. In that method set Tag.

   public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) {
        TabInfo info = new TabInfo(clss, args);
        tab.setTag(info);
        tab.setTabListener(this);
        mTabs.add(info);
        mActionBar.addTab(tab);
        notifyDataSetChanged();
    }

then on TabSelected you can check for Tag

   @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        Object tag = tab.getTag();
        for (int i=0; i<mTabs.size(); i++) {
            if (mTabs.get(i) == tag) {
                mViewPager.setCurrentItem(i);
            }
        }
    }

For more information you can visit this and this link

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM