1. ホーム
  2. android

フラグメントバックスタックでActionBarのタイトルを処理する?

2023-10-12 16:12:23

質問

私は Activity で読み込んでいます。 ListFragment を読み込むと、クリックすると一段階下にドリルダウンして、新しいタイプの ListFragment が表示され、元のものと置き換わります。 showFragment メソッドを使用)。これはバックスタックに配置されます。

冒頭で、アクティビティはアクションバーにデフォルトのタイトルを表示します (つまり、アプリケーションの android:label ).

次の階層のリストを表示する場合、クリックされた項目の名前がアクションバーのタイトルになるようにする。

しかし 戻る を押したときに、元のデフォルトのタイトルに戻してほしいのです。 これは、何か FragmentTransaction が知っているものではないので、タイトルは復元されません。

についてなんとなく読んだことがある FragmentBreadCrumbs について読んだことがありますが、これはカスタムビューを使用する必要があるようです。私はActionBarSherlockを使用しており、独自のカスタムタイトルビューを持たないことを希望しています。

これを行う最良の方法は何でしょうか。 定型的なコードのロードや、途中で表示されるタイトルを追跡することなく、可能でしょうか?


protected void showFragment(Fragment f) {
  FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
  ft.replace(R.id.fragment_container, f);
  ft.addToBackStack(null);
  ft.commit();
}

どのように解決するのですか?

すべてのフラグメントとすべてのアクティビティで、私はこのようにタイトルを変更します。この方法では、アクティブなタイトルは常に正しいものになります。

@Override
public void onResume() {
    super.onResume();
    // Set title
    getActivity().getActionBar()
        .setTitle(R.string.thetitle);
}

フラグメントの内部でonResumeが呼ばれないケースもあります。このような場合、私たちは使うことができます。

public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if(isVisibleToUser) {
        // Set title
        getActivity().getActionBar()
            .setTitle(R.string.thetitle);
    }
}