我使用的是ViewPager另一個片段替換片段與FragmentPagerAdapter舉辦三種不同的片段裏面ViewPager
[Fragment1][Fragment2][Fragment3]
我試圖做到的,是用一個全新的片段成功替代片段1在一起,片段4,如果一個特定的任務成功。
當我使用..
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.fragment1_layout_id, fragment4);
transaction.commit();
..the片段精美替換和Fragment4示出,而不是片段1。儘管只要我一直向Fragment3滑動,然後再回到Fragment4,Fragment1已經卷土重來。
再說,如果我用..
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.remove(fragment1);
transaction.commit();
..Fragment1被刪除,我回來的時候Fragment4是存在的。因此,這種解決方案的問題是,我無法找到一個方法來立即顯示Fragment4爲片段1被刪除,即使我想:
transaction.add(fragment4);
transaction.show(fragment4);
這是我的FragmentPagerAdapter實現看起來像此刻,無任何交易管理:
public static class PagerAdapter extends FragmentPagerAdapter {
public PagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return VIEW_COUNT;
}
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = Fragment1.newInstance(context_);
break;
case 1:
fragment = Fragment2.newInstance(context_);
break;
case 2:
fragment = Fragment3.newInstance(context_);
break;
default:
break;
}
return fragment;
}
}
編輯。
所以看來我並不完全清楚我的問題。我決定刪除我之前設法創建的所有意大利麪條,並試圖說明我已將它們關閉(參見上面的粗體文字)。
反正這裏有差不多就是我一直在努力中的getItem()做:
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
switch (position) {
case 0:
if (!app.isUserLoggedIn) {
if (loginFragment_ == null) {
loginFragment_ = LoginFragment.newInstance(context_);
transaction_ = fragmentManager_.beginTransaction();
if (logoutFragment_ != null) {
transaction_.remove(logoutFragment_);
logoutFragment_ = null;
}
transaction_.add(loginFragment_, "login");
transaction_.commit();
}
if (fragmentManager_.findFragmentByTag("login") == null)
fragment = LoginFragment.newInstance(context_);
else
fragment = fragmentManager_.findFragmentByTag("login");
} else {
if (logoutFragment_ == null) {
logoutFragment_ = LogoutFragment.newInstance(context_);
transaction_ = fragmentManager_.beginTransaction();
if (loginFragment_ != null) {
transaction_.remove(loginFragment_);
loginFragment_ = null;
}
transaction_.add(logoutFragment_, "logout");
transaction_.commit();
}
if (fragmentManager_.findFragmentByTag("logout") == null)
fragment = LogoutFragment.newInstance(context_);
else
fragment = fragmentManager_.findFragmentByTag("logout");
}
break;
case 1:
fragment = HomeFragment.newInstance(context_);
break;
case 2:
fragment = RegisterFragment.newInstance(context_);
break;
default:
break;
}
return fragment;
}
有了這個代碼,我什麼也沒有做,但如果有人看到我在做什麼錯了,想點我在正確的方向,我會很感激!
我認爲你應該在PagerAdapter中改變getItem。有返回的片段必須可見。 – pawelzieba
@dziobas這就是我一直試圖去做我在我的問題中描述的魔力的地方,沒有運氣。 – velu
fragment2被調用時,我點擊tab1,我不知道爲什麼tab2被稱爲?是適配器錯誤? –