我实现了一个由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()中添加了以下代码:
if (start){
mViewPagerAdapter.notifyDataSetChanged();
start=false;
}
答案 0 :(得分:0)
片段不是那样的..你需要在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) {
}
});