私はViewPagerをFragmentPagerAdapterと共に使用して3つの異なるフラグメントをホストしています。ViewPager内でフラグメントを別のフラグメントに置き換える
[Fragment1][Fragment2][Fragment3]
私が達成しようとしているのは、特定のタスクが成功するとFragment1を完全に新しいフラグメントFragment4に置き換えることです。
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.fragment1_layout_id, fragment4);
transaction.commit();
..フラグメントが美しく置き換えられ、フラグメント1の代わりにフラグメント4が表示されます。私はFragment3までスワイプしてからFragment4に戻ってすぐに、Fragment1が復活しました。
また、私が使用する場合..
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.remove(fragment1);
transaction.commit();
..フラグメント1が削除され、私が戻ってくると、フラグメント4があります。だからこのソリューションの問題は、たとえ私が試しても、Fragment1が削除されてもすぐにFragment4を表示する方法が見つからないことです。を管理するトランザクション:
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が呼び出されるのかわかりません。アダプターエラーですか? –