私には、私にはActivity
のナビゲーションドロワーがあり、Toolbar
(ActionBar
など)と同期しています。アクティビティには断片が少なく、異なるフラグメントでは異なるAppBar
モード(1つは視差、もう1つはシンプル)を使用する必要があります。だから、私はCoordinatorLayout
をAppBarと内容でそれぞれ設定するべきだと思う。
しかし、私はDrawerとの同期を保存するために新しいツールバーの最後のツールバーをどのように置き換えることができますか?それは間違った方法で、私は別のものにする必要がありますか?フラグメントとナビゲーション用ツールバーの別のツールバー
答えて
あなたのナビゲーション引き出し用DrawerLayout
とNavigationView
を使用している場合は、私によると最善の解決策は、フラグメントレイアウトごとに個別DrawerLayout
を使用して、フラグメントごとに異なっDrawerLayout
の本体でAppBarLayout
を使用することです。
ない私のアプローチが良好であれば確かに、私は私の活動には、このパブリックメソッドを追加しようとしました:
public void setToolbar(Toolbar toolbar) {
if(toolbar != null) {
setSupportActionBar(toolbar);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
} else {
drawer.setDrawerListener(null);
}
}
と私はすべての断片でこれを追加しました:
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
((MainActivity)getActivity()).setToolbar(toolbar);
}
@Override
public void onDestroyView() {
((MainActivity)getActivity()).setToolbar(null);
super.onDestroyView();
}
それが正常に動作しています、メモリリークやその他のパフォーマンス上の問題が発生するかどうかはわかりません。多分誰かがそれを手伝うことができますか?
私はこの問題を解決しました。 'layoutBar'のように' toolbar'を 'onCreateView'で設定し、それを' DrawerLayout'と同期させると、レイアウトレイアウトでは 'DrawerLayout'、フラグメントレイアウトでは' Toolbar'を使用します。 –
そして、あなたの解決策はメモリリークがありません) –
@Childフラグメント 'onCreateView'から' DrawerLayout'とどのように同期しているかを詳しく説明しますか? フラグメント 'Toolbar'ごとに' ActionBarDrawerToggle'を再作成していますか? 'DrawerLayout'コンストラクタを' Toolbar'と一緒に使うか使わないのですか? – jayeffkay
あなたは、次のコードのように、各Fragment
からメインDrawerLayout
にアクセスすることができます:あなたはあなたが別の断片にナビゲーション引き出しに指定されたことをアプリケーションバー(ツールバー)を使用したい場合は、例えば、異なるオプションメニュー、
AppCompatActivity actionBar = (AppCompatActivity) getActivity();
actionBar.setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) actionBar.findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
getActivity(), drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
アクティビティとフラグメントについて記述できますか?すべてのフラグメントに独自のツールバーがありますか、またはアクティビティを使用していますか?私はDrawerLayoutとNavigationViewのアクティビティを持っています。その中には、フラグメントが配置され、CoordinatorLayout、AppBarLayout、Toolbarが含まれていますが、ツールバーが変わったときにツールバーが表示されません。 – CoolMind
ナビゲーション・ドロワー・ロジックを指定したメイン・アクティビティーでパブリック・メソッドを作成することができます。その後、
public void setToolbar(Toolbar toolbar, String title){
AppCompatActivity actionBar = this;
actionBar.setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout)actionBar.findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toogle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.drawer_open, R.string.drawer_close);
drawer.addDrawerListener(toogle);
toogle.setDrawerIndicatorEnabled(true);
toogle.syncState();
if(toolbar != null)
toolbar.setTitle(title);
}
今、あなたはメインツールバーにアクセスして、カスタムタイトル、オプションメニューでそれを無効にするために、あなたの断片で、このメソッドを使用することができます...あなたのフラグメントに新しいツールバーの変数を作成することによってこれを行うことができます とこの
toolbarFragment = (Toolbar)getActivity().findViewById(R.id.toolbar);
R.id.toolbarようonCreateView方法でそれを膨らませることは、あなたのレイアウトファイルで指定されたツールバーのIDであり、それはあなたがメインツールバーのためのあなたの主な活動で使用したのと同じIDです。 は今、あなたはあなたがこのフラグメントのためのオプションメニューを使用する場合は、断片で
setHasOptionsMenu(true);
を呼び出す必要があり、この
((MainActivity)getActivity()).setToolbar(toolbarFragment, "Some title");
のようなフラグメントには、メソッドSetToolbar関数(ツールバーツールバー、文字列のタイトル)を呼び出すことができますのonCreate ()またはonCreateView()メソッドを使用します。その後、あなたはこの
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.custom_menu1, menu);
}
のようにあなたが同様にあなたのナビゲーション引き出しの中に他のフラグメントのために、この手順を繰り返すことができます方法onCreateOptionsMenu()をオーバーライドすることができます。それは私のために働いていましたが、これがアクティビティやフラグメントライフサイクルに違反するのか、メモリリークを引き起こすのか分かりません。
いいえ、男、それは問題ではありませんでした。私は、さまざまな断片に対して非常にフレックスで複雑なGUIを作成する必要がありました。それはappbarへの完全なアクセスを必要としました –
私は視差ヘッダ、ナビゲーションパス(ファイルマネージャーのような)などで断片を持っていました。 –
- 1. ナビゲーション・ドロワー・テンプレートでフラグメントをツールバーに変更
- 2. 設定アクティビティ/フラグメント内のツールバー
- 3. フラグメントのアクションバーとしてのツールバー
- 4. ビューとデータAPIツールバーとナビゲーション操作
- 5. 基本ConstraintLayout(ツールバー、フラグメントコンテナ、下部のナビゲーション)
- 6. v7ツールバーのツールバーのホームボタンを使ってナビゲーションを提供する方法
- 7. フラグメント内の折りたたみツールバー
- 8. ツールバーでフラグメントを戻すボタンを表示
- 9. Ios7 Safariコントロール上部と下部のナビゲーション/ツールバー
- 10. アクティビティのツールバーを使用してフラグメントから移動する
- 11. ツールバーのタイトルとオーバーフローメニュー
- 12. ツールバーのオーバーフローラベルとテキストボックス
- 13. ツールバーのデフォルトスタイルとナビゲーションアイコン
- 14. AppCompatActivityとツールバーを含むActionBarDrawerToggleフラグメント付きの戻るボタン
- 15. 1つのフラグメントから別のフラグメントに移動するときにツールバー/ ActionBarでオプションを戻す方法
- 16. ツールバー
- 17. ツールバー
- 18. CKEditorバージョンのツールバーはFirefoxのツールバーを使用して、誤っ
- 19. Qtツールバーとメニューバー
- 20. IE:ツールバーとエクスプローラーバー
- 21. ImageButtonとseflmadeツールバー
- 22. Request.Browser.Browserとask.comツールバー
- 23. ツールバーのトラブルシューティング用のスイッチカードsencha
- 24. ウェブページ用のツールバーの実装
- 25. ゲットブラウザの幅とツールバーとメニューサイズ
- 26. Android:API用透明ツールバー
- 27. ツールバー項目のDataTemplateが、私はボタンを含むツールバーを持つ親のツールバー
- 28. ツールバーのSearchViewとcollapseIconのマージン
- 29. ツールバーとScrollViewの使用方法は?
- 30. ツールバーのボタンでナビゲーション・ドロワーが開かない
これは唯一の解決策ですか?ほぼすべてのビュー階層を再接続する必要があります –
AppBarLayoutはDrawerLayout本体の内部に埋め込まれたままであるため、親ビューではなくボディビューを変更しようとしていることを理解する必要があります。だからベストプラクティスは、レイアウトを再宣言することです。 NavigationViewがすべてのフラグメントで同一であれば、別のXMLレイアウトファイルに記述し、コードを短縮できるを使用できます。 –
さて、ありがとう!ちょうど私は、このソリューションはフラグメントの切り替えに多くの時間がかかると思います。しかし、私はそれを使用します。 –