7

私の主な活動では、 のアクションバーがありNAVIGATION_MODE_TABSます。各タブの内容はリストフラグメントです。

リスト項目をクリックすると、新しいフラグメントが表示され、アクションバー モードがNAVIGATION_MODE_STANDARD(タブが非表示になるように) 変更されるようにしたいと思います。

私はこれを次のコードで動作させることができました:

listitemclick メソッドで:

        ActionBar actionBar = getActivity().getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);

        Fragment albumListFragment = new AlbumListFragment();
        albumListFragment.setArguments(bundle);
        FragmentTransaction ft = getFragmentManager().beginTransaction();

        ft.replace(android.R.id.content, albumListFragment);
        ft.addToBackStack(null);

        // Commit the transaction
        ft.commit();

        Log.i("FragmentList", "Item clicked: " + id);

問題は、戻るボタンを押したときに、タブがまだ消えていて、前のフラグメントが表示されないことです。

私は何か間違ったことをしていますか..フラグメントのバックスタックと関係がありますか? 別の方法で処理する必要がありますか、それともバックプレスをオーバーライドする必要がありますか?

- 編集 -

わかりやすくするために、fragmenttransaction.replace を呼び出すときに addToBackStack を呼び出していますが、戻るボタンを押しても前のフラグメントは復元されません。

4

4 に答える 4

1

多分これは少し遅いです、私はあなたの問題を何時間も再構築しようとしましたが、成功しませんでした. ActionBar Tab によってホストされているフラグメントのリストビューから、質問に記載されている方法 (つまり、ft.replace(android.R.id.content, albumListFragment);) で別のビューに切り替えようとしましたが、効果はありませんでした。グーグルとスタックオーバーフローの後、この方法を使用してタブ内のフラグメントを正常に切り替えましたが、問題はありませんでした。

「アクション バーが正しく表示されない」問題として、バックスタックの復帰とAndroid デベロッパー ガイドに記載されている UI の変更が原因である可能性があります。onBackStackChanged() コールバックをオーバーライドして、UI を再構築しようとする場合があります。

「バックスタックは前のフラグメントを元に戻さない」という問題があるため、他の人が問題を再構築して答えを見つけるのを助けるために、もう少しコードを投稿することをお勧めします。

お役に立てれば幸いです。

于 2013-09-13T12:02:18.103 に答える
0

まったく同じ問題が発生し、ActionBar を NAVIGATION_MODE_STANDARD に戻した場合にのみ問題が発生することがわかりました。

私にとって唯一の解決策は、タブのない新しいフラグメントを NAVIGATION_MODE_STANDARD を持つヘルパー アクティビティに配置することでした。次に、Android が提供する戻るボタン機能を簡単に使用して、NAVIGATION_MODE_TABS でアクティビティに戻り、その状態を保持できます。

于 2012-09-11T09:24:58.467 に答える
0

FragmentTransaction.replace()は、実際にはレイアウト内の前のフラグメントを削除し、フラグメントの新しいインスタンスを追加します。

置換の代わりにFragmentTransaction#show()およびFragmentTransaction#hide()メソッドを使用してみてください。

于 2012-12-22T05:18:25.787 に答える
-1

バックスタックは現在のアクティビティを終了し、前のフラグメントではなく前のアクティビティに移動します。(バックスタック ガイドを参照してください: http://developer.android.com/guide/components/tasks-and-back-stack.html )。

あなたが提案したように、 onBackPressed をオーバーライドすることで動作を強制することもできますが、そのような方法で Android の自然な動作を変更するかどうかはわかりません。同様のことを行う他のアプリ、特にコアアプリを見ると、戻るボタンは前のフラグメントではなく、前のアクティビティに移動します。

また、「上へ」ボタンの動作を完全に制御できます (つまり、左矢印が付いたアクション バーのアプリ アイコン)。ActionBarガイドで説明されているように、ボタンとして使用するようにプログラムで設定する必要があります(これを行う方法を知る必要がある場合はお知らせください)。それにより、スタックに以前のフラグメントを設定することができますどこかで維持。

于 2012-08-04T16:14:15.333 に答える