Я пишу приложение, используя Jetpack, рекомендуемая архитектура , NavigationUI и график навигации .Итак, у меня есть одно основное действие с Toolbar
, BottomNavigationView
и NavHostFragment
.
. До сих пор все работало хорошо: мне нужно изменить Toolbar
, чтобы использовать CollapsingToolbarLayout
и скрытьBottomNavigationView
в одном из моих фрагментов.
Я пытался добавить навигационный слушатель (как описано здесь ), чтобы скрыть мои Toolbar
и BottomNavigationView
, и в моем фрагменте,Я надуваю новый Toolbar
и звоню setSupportActionBar()
по основному виду деятельности.
// in MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
navController.addOnDestinationChangedListener((controller, destination, arguments) -> {
if(destination.getId() == R.id.detailFragment){
bottomBar.setVisibility(View.GONE);
topBar.setVisibility(View.GONE);
}else{
bottomBar.setVisibility(View.VISIBLE);
topBar.setVisibility(View.VISIBLE);
}
});
// ...
}
public void changeToolbar(Toolbar toolbar){
getSupportActionBar().hide();
setSupportActionBar(toolbar);
}
// in DetailFragment.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// ...
navController = NavHostFragment.findNavController(this);
AppBarConfiguration.Builder builder = new Builder(
R.id.accuracyFragment,
R.id.dataFragment,
R.id.magnetFragment,
R.id.settingsFragment);
AppBarConfiguration config = builder.build();
NavigationUI.setupWithNavController(toolbarLayout, toolbar, navController);
((MainActivity)getActivity()).changeToolbar(toolbar);
// ...
}
Он почти работает правильно, но:
- , когда я перемещаюсь вверх или иду к другомуфрагмент,
BottomNavigationView
отображается неправильно.Похоже, что его оттолкнул Toolbar
. - переход ужасен: панель инструментов заметно меняется, я вижу, как она исчезает перед изменением
Так что вопрос: есть ли другой способ изменить / скрыть элементы навигации из фрагмента?Если нет, я должен создать новую деятельность?