初めまして、こちらをご覧いただきありがとうございます。私は4つのフラグメントを持っています。1 つは、メニューを表示する Menu Fragment です。データと画像のリストを表示する 2 つのリスト フラグメントがあります。4 番目のフラグメントは詳細フラグメントです。すべてが正常に始まります。
設定:
表示されるリスト ボタンをクリックすると、メニュー フラグがその後ろに隠れます。
リスト フラグメントのエントリをクリックすると、インターフェイスを使用してデータが渡され、詳細フラグメントが表示されます。
リストフラグメントに移動したら、戻るボタンをクリックします。
戻るボタンをもう一度クリックすると、メニューフラグが表示されます。
問題:
リスト ボタンをもう一度クリックすると、リストが表示されますが、メニュー フラグメントはまだその後ろに表示されています。
バックスタックと関係があると思いますが、正しく使用していない可能性があります。どんな助けでも大歓迎です。誰かがこの問題を説明できれば、それは素晴らしいことです。コンデの一部を投稿してほしい場合はお知らせください。しかし、私の問題はバックスタックにあるように感じます。これは、バックスタックを台無しにしたコードの一部です。
private Fragment visible;
private Fragment mVisibleCached;
@Override
public void onBackPressed() {
super.onBackPressed();
visible = mVisibleCached;
}
. .
public void showFragment(int fragIn) {
final FragmentManager fm = getSupportFragmentManager();
final FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
if (visible != null) {
ft.hide(visible);
//ft.remove(visible);
mVisibleCached = visible;
ft.addToBackStack(null);
}
switch (fragIn) {
case 0:
menuFrag = ((MenuFragment) fm.findFragmentByTag(MenuFragment.TAG));
if (menuFrag == null) {
menuFrag = MenuFragment.newInstance();
ft.add(R.id.fragment_container, menuFrag, MenuFragment.TAG);
} else {
// ft.show(menuFrag);
//ft.add(R.id.fragment_container, menuFrag, MenuFragment.TAG);
if (!menuFrag.isVisible()) {
ft.show(menuFrag);
}
}
ft.addToBackStack(null);
visible = menuFrag;
break;
case 1:
programsFrag = ((ListFrag) fm.findFragmentByTag(PROGRAMS_TAG));
if (programsFrag == null) {
programsFrag = ListFrag.newInstance(false);
ft.add(R.id.fragment_container, programsFrag, PROGRAMS_TAG);
} else {
// ft.show(programsFrag);
//ft.add(R.id.fragment_container, programsFrag, PROGRAMS_TAG);
// ft.replace(R.id.fragment_container, programsFrag);
if (!programsFrag.isVisible()) {
ft.show(programsFrag);
}
}
ft.addToBackStack(null);
visible = programsFrag;
break;
case 2:
hostsFrag = ((ListFrag) fm.findFragmentByTag(HOSTS_TAG));
if (hostsFrag == null) {
hostsFrag = ListFrag.newInstance(true);
ft.add(R.id.fragment_container, hostsFrag, HOSTS_TAG);
} else {
// ft.show(hostsFrag);
//ft.add(R.id.fragment_container, hostsFrag, HOSTS_TAG);
// ft.replace(R.id.fragment_container, hostsFrag);
if (!hostsFrag.isVisible()) {
ft.show(hostsFrag);
}
}
ft.addToBackStack(null);
visible = hostsFrag;
break;
case 3:
detailsFrag = ((DetailsFrag) fm.findFragmentByTag(DetailsFrag.TAG));
if (detailsFrag == null) {
detailsFrag = DetailsFrag.newInstance();
ft.add(R.id.fragment_container, detailsFrag, DetailsFrag.TAG);
} else {
//ft.add(R.id.fragment_container, detailsFrag, DetailsFrag.TAG);
if (!detailsFrag.isVisible()) {
ft.show(detailsFrag);
}
}
ft.addToBackStack(null);
visible = detailsFrag;
break;
}
ft.commit();
}