从导航库中的导航活动中获取数据

时间:2018-06-06 13:04:16

标签: android navigation android-architecture-components

我正在使用建筑组件中的导航库,在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" />

2 个答案:

答案 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()时,有用。似乎只有在激活片段后我才能获得操作高度条。