説明してください...Activity
にNavigationDrawerがあり、Toolbar
と同期します(ActionBar
など)。アクティビティにはフラグメントがほとんどなく、フラグメントごとに異なるAppBar
モードを使用する必要があります(1つは視差、もう1つは単純)。したがって、AppBarとコンテンツを使用して各フレームにCoordinatorLayout
を設定する必要があると思います。
しかし、Drawerとの同期を保存するために、newの最後のツールバーを置き換えるにはどうすればよいですか?またはそれは間違った方法であり、私はそれを別のものにする必要がありますか?
私のアプローチが良いかどうかはわかりませんが、このパブリックメソッドをアクティビティに追加しようとしました。
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();
}
正常に動作していますが、メモリリークやその他のパフォーマンスの問題が発生する可能性があるかどうかはわかりません。多分誰かがそれを手伝うことができますか?
次のコードのように、各DrawerLayout
からメインのFragment
にアクセスできます。
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();