我正在使用ViewPager和FragmentPagerAdapter一起承载三个不同的片段
[Fragment1][Fragment2][Fragment3]
我的目标是,如果特定任务成功,成功替换Fragment1为一个全新的Fragment4。
当我使用...
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.fragment1_layout_id, fragment4);
transaction.commit();
..片段被很好地替换了,Fragment4代替Fragment1展示。但是,一旦我滑动到Fragment3然后返回到Fragment4,Fragment1又会出现。
再说一遍,如果我使用..
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.remove(fragment1);
transaction.commit();
当我移除Fragment1并返回时,会出现Fragment4。所以这种解决方案的问题在于,我找不到一种立即显示Fragment4且移除Fragment1的方法,即使我尝试了:
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;
}
这段代码并没有实现我想要的功能,如果有人能指出我的错误并帮我指明正确的方向,我将非常感激!
ViewPager
和FragmentPagerAdapter
插入/替换制表符。 - jfritz42