-1
我使用ViewPager和一些片段。我想實現下一個小小的效果:如果我滑動到viewpager的第一頁(所以頁面的索引等於0),我想重新創建它。所以我不希望它被從內存中拉出來,我希望每次滑動到該頁面時都要重新創建它。 我讀過,我需要重寫instantiateItem方法,但我不能這樣做。如何故意用viewpager重新創建片段?
public class PagerAdapter1 extends FragmentPagerAdapter {
private List<String> fragments;
private static final String TAG = "FragmentPagerAdapter";
private static final boolean DEBUG = false;
private final FragmentManager mFragmentManager;
private FragmentTransaction mCurTransaction = null;
/**
* @param fm
* @param fragments2
*/
public PagerAdapter1(FragmentManager fm, List<String> fragments2) {
super(fm);
mFragmentManager=fm;
this.fragments = fragments2;
}
/* (non-Javadoc)
* @see android.support.v4.app.FragmentPagerAdapter#getItem(int)
*/
@Override
public Fragment getItem(int position) {
//return this.fragments.get(position);
return Fragment.instantiate(ViewPagerActivity.context, fragments.get(position));
}
/* (non-Javadoc)
* @see android.support.v4.view.PagerAdapter#getCount()
*/
@Override
public int getCount() {
return this.fragments.size();
}
@Override
public Object instantiateItem(View container, int position) {
Log.i("OVERRIDE", "OVERRIDE");
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
// Do we already have this fragment?
String name = makeFragmentName(container.getId(), position);
Fragment fragment = mFragmentManager.findFragmentByTag(name);
if (fragment != null) {
if (DEBUG) Log.v(TAG, "Attaching item #" + position + ": f=" + fragment);
mCurTransaction.attach(fragment);
} else {
fragment = getItem(position);
if (DEBUG) Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
mCurTransaction.add(container.getId(), fragment,
makeFragmentName(container.getId(), position));
}
return fragment;
}
private static String makeFragmentName(int viewId, int index) {
return "android:switcher:" + viewId + ":" + index;
}
}
我從來沒有得到OVERRIDE標記。所以我的第一個問題是,爲什麼我不明白?我應該如何重寫這個方法(如果這是我需要的)才能達到我之前寫的效果?我需要它,因爲我在頁面0保存了一個複選框的狀態,但優化會扭曲它,因爲如果我滑動到頁面1上,頁面0不會被銷燬,所以它不會重新創建它,並且複選框的狀態不會保存(除非我滑動到page2,因爲我使用setOffScreenLimit(1))。