UPDATE從FragmentStatePagerAdapter
刪除片段後,這個問題的一些主要的戰鬥,並從我設法解決這個問題,使用戶有所幫助。 這就是我的clearProgressUpTo
現在的樣子。
public void clearProgressUpTo(int progress) {
boolean deleted = false;
for (int i = fragments.size() - 1; i > 0; i--) {
int key = fragments.keyAt(i);
if (key != progress) {
fragments.delete(key);
deleted = true;
} else {
break;
}
}
if (deleted)
notifyDataSetChanged(); //prevents recursive call (and IllegalStateException: Recursive entry to executePendingTransactions)
while (mSavedState.size() > progress) {
mSavedState.remove(mSavedState.size()-1);
}
}
爲什麼我notifyDataSetChanged
後這樣做的原因是因爲initiateItem
再次充盈我的mSavedState
。我確信在通知我的adapter
後不會包含這些Fragments
中的任何一個。
此外,如果你想這樣做,將mSaveState
改爲protected
,這樣你就可以從擴展類(在我的例子VerticalAdapter
)中得到它。
我忘了提,我使用FragmentStatePagerAdapter fix by Adam Speakman解決我的問題。
////////////////////////////////////////////// /////// 問題部分 /////////////////////////////////////// ///////////////
我遇到的問題是我需要完全刪除Fragments
中的FragmentStatePagerAdapter
。
我已經做就可以了POSITION_NONE
修復,但舊的片段似乎依然保持完好。
建設
因爲我ViewPager
的建設是不尋常的我被迫把裏面我VerticalAdater
延伸FragmentStatePagerAdapter
一個SparseArray
保存我的所有片段。
public class VerticalAdapter extends FragmentStatePagerAdapter {
private SparseArray<Fragment> fragments = new SparseArray<Fragment>();
...
@Override
public Fragment getItem(int position) {
return getFragmentForPosition(position);
}
@Override
public int getCount() {
return fragments.size();
}
問題
我已經負責清理所有Fragments
了一些點在我FragmentStatePagerAdapter
的特殊方法。它的運作良好,但我不能擺脫的問題是清除FragmentStatePagerAdapter
內的ArrayList
。甚至儘管我清除SparseArray
的FragmentStatePagerAdapter
我VerticalAdapter
擴展仍持我不希望有那裏的Fragments
的ArrayList
。正因爲如此,當我創建新的Fragments
他們有舊的狀態。
public void clearProgressUpTo(int progress) {
boolean deleted = false;
for (int i = fragments.size() - 1; i > 0; i--) {
int key = fragments.keyAt(i);
if (key != progress) {
fragments.delete(key);
deleted = true;
} else {
break;
}
}
if (deleted)
notifyDataSetChanged(); //prevents recursive call (and IllegalStateException: Recursive entry to executePendingTransactions)
}
如果您需要更多信息/代碼,請告訴我的意見,我會盡量提供儘可能多的信息,我可以。
我不知道如何解決這個問題,讓任何輸入,將不勝感激。
編輯
添加請求的代碼。
private Fragment getFragmentForPosition(int position) {
return fragments.get(getKeyForPosition(position));
}
public int getKeyForPosition(int position) {
int key = 0;
for (int i = 0; i < fragments.size(); i++) {
key = fragments.keyAt(i);
if (i == position) {
return key;
}
}
return key;
}
post'getFragmentForPosition(position);'please。 – mmlooloo 2014-09-19 08:58:50
添加了您請求的代碼。 – JakubW 2014-09-19 09:03:31
從我的'Adatper'這裏缺少的唯一東西是方法'setProgress',它填充'fragments'數組。 爲什麼我知道它的舊狀態?因爲'setProgress'正在用''Fragments'的'newinstance'重新加載整個'fragments'數組。 另外''ViewPager'數組內'Fragments'的ID與'setProgress'之前的相同。 – JakubW 2014-09-22 06:10:10