【问题标题】:get data from Navigation Activity in Navigation library从导航库中的导航活动获取数据
【发布时间】:2018-06-06 13:04:16
【问题描述】:

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

【问题讨论】:

    标签: android navigation android-architecture-components


    【解决方案1】:

    当我在片段生命周期方法onActivityCreated() 中尝试((MainActivity).getActivity()).getSupportActionBar() 时,它为getHeight() 返回了空值,但是当我尝试在单击按钮/菜单项时执行((MainActivity).getActivity()).getSupportActionBar().getHeight() 时,它可以工作。似乎只有在片段被激活后我才能获得动作栏的高度。

    【讨论】:

      【解决方案2】:

      您可以在您的活动中添加 addOnNavigatedListener,并根据当前目的地使用工具栏做一些事情。如果您想将一些数据传递给当前片段,您可以使用附加到活动的视图模型,并设置片段正在侦听的参数/状态。

      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
              }
      
       }
      }
      

      【讨论】:

      • 如果我需要做一些更复杂的事情,我会尝试使用附加到活动的视图模型,谢谢你的回答。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      • 2014-12-11
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多