如何使用FragmentStatePagerAdapter保持適配器中的片段的引用?然後我將它們都保存在內存中,但也完全控制了刪除。這種方法有什麼不好的地方,我以後會遇到問題嗎?此外,我已經改變,所以片段作爲對象而不是類傳遞,因此留在尋呼機之外。這有什麼問題嗎?
附上我的適配器代碼:
public static class TabsAdapter extends FragmentStatePagerAdapter implements
ActionBar.TabListener, ViewPager.OnPageChangeListener {
private final Context mContext;
private final ActionBar mActionBar;
private final ViewPager mViewPager;
private final ArrayList<Fragment> mTabs = new ArrayList<Fragment>();
public TabsAdapter(SherlockFragmentActivity activity, ViewPager pager) {
super(activity.getSupportFragmentManager());
mContext = activity;
mActionBar = activity.getSupportActionBar();
mViewPager = pager;
mViewPager.setAdapter(this);
mViewPager.setOnPageChangeListener(this);
}
public void addTab(ActionBar.Tab tab, Fragment fragment) {
tab.setTag(fragment);
tab.setTabListener(this);
mTabs.add(fragment);
mActionBar.addTab(tab);
notifyDataSetChanged();
}
public void replaceTab(ActionBar.Tab tab, Fragment fragment, int position) {
tab.setTag(fragment);
tab.setTabListener(this);
mTabs.set(position, fragment);
notifyDataSetChanged();
}
@Override
public int getCount() {
return mTabs.size();
}
@Override
public Fragment getItem(int position) {
return mTabs.get(position);
}
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
mActionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
@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);
}
}
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
@Override
public int getItemPosition(Object object){
return PagerAdapter.POSITION_NONE;
}
}
謝謝,我已經嘗試過了,它的作品! 但是使用FragmentStatePagerAdapter意味着碎片每次在它們之間切換/滑動時都會重新加載,或者它們仍然保留在內存中,並且在調用notifyDataSetChanged時重新加載? – user1293081
每次刷卡時'FragmentStatePagerAdapter'都會卸載/加載。它是處理能力和內存之間的交換,與'Fragment' related'PagerAdapter'有關。 – Louth
好吧,所以沒有辦法使用FragmentPageAdapter,只需手動強制重新加載?爲了使它更平滑,會這樣做。 – user1293081