私のフラグメントトランザクションのこの動作を理解できません。誰かが私が狂って行く前に介入してもらえますか?私のMainActivityでは、私はそれを正しくセットアップ:Tab1を(ガイド)TAB2(マップ)TAB3(詳細):Androidフラグメントトランザクションで怒っている
private final GuideFragment guideFragment = new GuideFragment();
private final MapFragment mapFragment = new MapFragment();
private final MoreFragment moreFragment = new MoreFragment();
Fragment active;
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
switch (item.getItemId()) {
case R.id.navigation_guide:
if (!guideFragment.isAdded()) {
transaction.add(R.id.content,guideFragment).commit();
active = guideFragment;
Log.d(TAG, "add Fragment1");
break;
} else {
transaction.hide(active).show(guideFragment).commit();
active = guideFragment;
Log.d(TAG, "show Fragment1");
break;
}
case R.id.navigation_map:
if (!mapFragment.isAdded()) {
transaction.add(R.id.content, mapFragment).commit();
active = mapFragment;
Log.d(TAG,"add Fragment2");
break;
} else {
transaction.hide(active).show(mapFragment).commit();
active = mapFragment;
Log.d(TAG,"show Fragment2");
break;
}
case R.id.navigation_more:
if (!moreFragment.isAdded()) {
transaction.add(R.id.content,moreFragment).commit();
active = moreFragment;
Log.d(TAG,"add Fragment3");
break;
} else {
transaction.hide(active).show(moreFragment).commit();
active = moreFragment;
Log.d(TAG,"show Fragment3");
break;
}
}
return true;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
//start with guide view/fragment
switchTabView(R.id.navigation_guide);
}
//method to start or switch a tab
private void switchTabView(int itemId) {
navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
navigation.setSelectedItemId(itemId);
}
私のアプリは、あなたが上見ることができるように3つのタブがあります。
アプリが起動すると、最初のタブ(ガイド)が正しく追加されて表示されます。 次にMap(次のFragment)をタップします。これが正しく追加されて表示されます。 最後に「もっと見る」タブ(私の3番目のタブ)は素晴らしい作品です。
しかし、アクティビティが起動し、私は1-3をタップすると、これまでに正しい(マップするガイド) - (タブをマッピングするためにもっとタブ) その後、3-2すべての良い - しかし、当時2-1から (地図ガイドへの)ガイド断片があるはずの3番目のタブ断片(More)が突然表示されます。誰かが間違っていることを知っていますか? 助けていただければ幸いです。 2回のフラグメントを隠す呼び出す場合マテウス
transaction.hide(fragment3).hide(fragment2).show(fragment1).commit();
へ
ソリューションのおかげで、私はきれいなことであるかわからないが、私は3つのタブで、それはまだ大丈夫だと思います。より多くのタブでは、これをremove()やreplace()のようなやり方で処理することを検討します。
アップデート - 予想通りのソリューションは、よりトリッキーです:最後に
switch (item.getItemId()) {
case R.id.navigation_guide:
if (!guideFragment.isAdded()) {
transaction.add(R.id.content,guideFragment).commit();
Log.d(TAG, "add Fragment1");
break;
} else {
if (!moreFragment.isAdded() && mapFragment.isAdded()) {
transaction.hide(mapFragment).show(guideFragment).commit();
}
if (moreFragment.isAdded() && !mapFragment.isAdded()) {
transaction.hide(moreFragment).show(guideFragment).commit();
}
if (moreFragment.isAdded() && mapFragment.isAdded()) {
transaction.hide(moreFragment).hide(mapFragment).show(guideFragment).commit();
}
Log.d(TAG, "show Fragment1");
break;
}
case R.id.navigation_map:
if (!mapFragment.isAdded()) {
transaction.add(R.id.content, mapFragment).commit();
Log.d(TAG,"add Fragment2");
break;
} else {
if (!moreFragment.isAdded()) {
transaction.hide(guideFragment).show(mapFragment).commit();
} else {
transaction.hide(guideFragment).hide(moreFragment).show(mapFragment).commit();
}
Log.d(TAG,"show Fragment2");
break;
}
case R.id.navigation_more:
if (!moreFragment.isAdded()) {
transaction.add(R.id.content,moreFragment).commit();
Log.d(TAG,"add Fragment3");
break;
} else {
if (!mapFragment.isAdded()) {
transaction.hide(guideFragment).show(moreFragment).commit();
} else {
transaction.hide(guideFragment).hide(mapFragment).show(moreFragment).commit();
}
Log.d(TAG,"show Fragment3");
break;
}
}
バグ無料、あなたは他のフラグメントが追加されているかどうかを確認する必要があります!あなたが戻って2から1へ行く時点では、この行が呼び出されます
いくつかのコードを見たいと思っている人のために、私はresovlingコードスニペットで質問を更新しました。 –