交換片段我有3個片段一個ViewPager和我的FragmentPagerAdapter:在viewpager
private class test_pager extends FragmentPagerAdapter {
public test_pager(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
return fragments[i];
}
@Override
public long getItemId(int position) {
if (position == 1) {
long res = fragments[position].hashCode()+fragment1_state.hashCode();
Log.d(TAG, "getItemId for position 1: "+res);
return res;
} else
return fragments[position].hashCode();
}
@Override
public int getCount() {
return fragments[2] == null ? 2 : 3;
}
@Override
public int getItemPosition(Object object) {
Fragment fragment = (Fragment) object;
for (int i=0; i<3; i++)
if (fragment.equals(fragments[i])){
if (i==1) {
return 1; // not sure if that makes a difference
}
return POSITION_UNCHANGED;
}
return POSITION_NONE;
}
}
在頁面中的一個(#1),I是不斷變化的要被顯示的片段。我刪除舊片段的方法是這樣的:
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().remove(old_fragment1).commit();
然後就是改變我發現,我真的不能add
或replace
新的一個或它會抱怨的ViewPager嘗試的fragments[1]
值要添加它也與另一個標籤...(我在這裏做錯了什麼?)
我顯示的所有片段都有setRetainInstance(true);
的onCreate
函數。
我的問題是,這通常適用於前幾個替換,但後來當我嘗試重用一個片段,有時(我沒有真正想出了模式,相同的片段可能會顯示多次,然後纔會發生這種情況)它只會顯示一個空白頁面。
以下是我已經找到了我的片段的回調函數發生了,我想,當問題發生,以顯示:
onAttach
被稱爲(但在那個時候,getView仍然是空)onCreateView
不叫(這是預期)onViewStateRestored
不叫(爲什麼不呢?)onResume
不叫(我真的認爲它會...)
如果它改變任何東西,我使用的是支持包,我的活動是一個SherlockFragmentActivity
編輯(回答Marco的評論):
的片段中的中的onCreate函數實例活動,我填一個ArrayList與那些片段:
char_tests = new ArrayList<Fragment>(Arrays.asList(
new FragmentOptionA(), new FragmentOptionB(), new FragmentOptionC()));
的我從列表中選擇設置fragments[1]
(這是所有在UI線程中完成)
其中是創建的片段? –
@Marco在Activity的onCreate函數中,我填充了這些片段的ArrayList。我在問題 – Matthieu
中添加代碼管理碎片的方式有點奇怪。結帳這個問題似乎與你的問題有關。 http://stackoverflow.com/questions/7951730/viewpager-and-fragments-whats-the-right-way-to-store-fragments-state?rq=1 –