为什么destroy片段总是保存listview位置?

时间:2015-04-16 09:39:55

标签: android

我使用ViewPagerFragment,      适配器:FragmentStatePagerAdapter      offScreenPagerLimit:1 我想知道为什么ListView布局中的Fragment始终保存其位置?我怎么让它忘记这个状态?

public class BaseFragmentStatePagerAdapter<T extends Fragment> extends FragmentStatePagerAdapter {
static final boolean DEBUG = true; 

private String[] mTitles;
private List<T> mFragments;

/**
 * @param fm
 */
public BaseFragmentStatePagerAdapter(FragmentManager fm, List<T> fragments) {
    super(fm);
    mFragments = fragments;
}

/**
 * @param fm
 */
public BaseFragmentStatePagerAdapter(FragmentManager fm, String[] titles, List<T> fragments) {
    super(fm);
    mFragments = fragments;
    mTitles = titles;
}

@Override
public T getItem(int position) {
    return mFragments.get(position);
}

@Override
public int getCount() {
    return mFragments == null ? 0 : mFragments.size();
}

@Override
public CharSequence getPageTitle(int position) {
    if (mTitles == null || mTitles.length == 0) {
        return super.getPageTitle(position);
    } else {
        return mTitles[position];
    }
}
}

2 个答案:

答案 0 :(得分:0)

如果offScreenPagerLimit:1 ViewPager将保持当前显示的Fragment的状态(显然),左边一个,右一个。

答案 1 :(得分:0)

我相信,因为您正在使用FragmentStatePagerAdapter,即使您在其上调用手动销毁,也会保存片段的状态。

  

使用Fragment管理每个的PagerAdapter的实现   页。该类还处理片段的保存和恢复   状态。

该片段中包含的所有数据也是如此,包括ListView及其保存的索引。

一种解决方案是禁用listView的保存。

ListView listView = new ListView(getActivity());
listView.setSaveEnabled(false);

我希望这有效!