我正在使用建筑组件中的导航库,在MainActivity中我将导航和工具栏设置为整个应用程序的主工具栏。在navigation.xml文件中,我为其中一个片段设置app:startDestination。是否有可能获得有关工具栏的数据,当我已经在已启动的片段中时,该工具栏被锁定在MainActivity中?
MainActivity:
ublic class MainActivity extends AppCompatActivity {
private NavigationActivityBinding binding;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.navigation_activity);
NavHostFragment hostFragment =
(NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.my_nav_host_fragment);
setSupportActionBar(binding.toolbar);
NavController navController = hostFragment.getNavController();
setupActionBar(navController);
setupBottomNavigation(navController);
}
private void setupBottomNavigation(NavController navController) {
NavigationUI.setupWithNavController(binding.bottomNavView, navController);
}
private void setupActionBar(NavController navController) {
NavigationUI.setupActionBarWithNavController(this, navController, null);
}}
navigation.xml:
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
app:startDestination="@+id/launcher_home">
<fragment
android:id="@+id/launcher_home"
android:name="josiak.android.example.cryptocurrency.charts.ui.CryptocurrencyMainList"
android:label="fragment_cryptocurrency_main_list"
tools:layout="@layout/fragment_cryptocurrency_main_list" />
答案 0 :(得分:1)
您可以在活动中添加addOnNavigatedListener,并根据当前目标对工具栏执行某些操作。如果要将一些数据传递给当前片段,可以使用附加到activity的viewmodel,并设置要侦听的片段的参数/状态。
findNavController(nav_host_fragment).addOnNavigatedListener { controller,
destination ->
when(destination.id) {
R.id.destination1 -> {
//Do something with your toolbar
}
R.id.destination2 -> {
//Do something with your toolbar
}
}
}
答案 1 :(得分:0)
当我在片段生命周期方法((MainActivity).getActivity()).getSupportActionBar()
中尝试onActivityCreated()
时,它为getHeight()
返回了空值,但当我单击按钮/菜单项时尝试执行((MainActivity).getActivity()).getSupportActionBar().getHeight()
时,有用。似乎只有在激活片段后我才能获得操作高度条。