3
我想保存viewpager中片段的狀態。我知道我應該這樣做:ViewPager and fragments — what's the right way to store fragment's state?。但是我使用的片段是這樣的:如何在viewpager中保存片段的狀態?
MyAdapter
class MyPagerAdapter extends FragmentStatePagerAdapter {
public List<String> fragmentsA; //plus
public MyPagerAdapter(FragmentManager fm) {
super(fm);
fragmentsA = fragments;//plus
}
@Override
public Fragment getItem(int position) {
//return MyFragment.newInstance();
return Fragment.instantiate(context, fragmentsA.get(position));
}
@Override
public CharSequence getPageTitle(int position) {
//return CONTENT[position % CONTENT.length].toUpperCase();
return mEntries.get(position % CONTENT.length).toUpperCase();
}
@Override
public int getCount() {
// return CONTENT.length;
return mEntries.size();
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
HostActivity
public static List<String> fragments = new Vector<String>();
@Override
public void onCreate(Bundle savedInstanceState)
{
pager = (ViewPager)findViewById(R.id.viewpager);
adapter = new MyPagerAdapter(getSupportFragmentManager());
indicator = (TabPageIndicator)findViewById(R.id.indicator);
pager.setAdapter(adapter);
indicator.setViewPager(pager);
pager.setCurrentItem(INITIAL_PAGE);
//mEntries.add...
fragments.clear();
fragments.add(Tab1Fragment.class.getName());
fragments.add(Tab2Fragment.class.getName());
fragments.add(Tab3Fragment.class.getName());
fragments.add(Tab4Fragment.class.getName());
}
我如何保存片段(fragments)說明這一點呢?我的意思是,我需要這個方法:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
getSupportFragmentManager()
.putFragment(outState, MessagesFragment.class.getName(), mMessagesFragment);
}
所以我應該在哪裏檢查每一個片段if (savedInstanceState != null)
?我應該如何將這些碎片放入「境外」?
UPDATE 所以我把上保存狀態代碼,每個片段是這樣的:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
setUserVisibleHint(true);
getFragmentManager().putFragment(outState, Tab1Fragment.class.getName(), this);
}
我把代碼給每一個片段(見更新的代碼),我如何使用它們現在加載狀態? –
我剛剛對你發佈的鏈接進行了一次快速瀏覽,而且這個傢伙的解決方案很愚蠢,不應該使用。 onSaveInstanceState中的Bundle用於保存片段狀態的基本值(例如,滾動位置,當前選定的索引)。然後在onCreateView期間,'savedInstance'包包含您保存的所有值,您可以恢復它們。這一切都由系統爲你處理,你不應該在onSaveInstanceState期間做片段交易或設置userHint – Budius
那麼你有什麼建議?如果我使用FragmentPagerAdapter而不是fragmentstatepageradapter,則所有視圖都將加載到內存中(之前已加載),因此它會記住該位置。但是,我在它們的內部有近20個帶有列表視圖的片段,並且我不能確定在同時存儲了20個片段之後的內存使用情況。這就是爲什麼我轉向使用fragmentstatepager適配器,因爲它破壞了視圖。你認爲系統能夠處理20個碎片而沒有任何堆錯誤嗎? –