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);
}
}
}
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.