代码之家  ›  专栏  ›  技术社区  ›  Alin

Android Jetpack导航如何处理工具栏和底部导航栏内容

  •  6
  • Alin  · 技术社区  · 6 年前

    我对导航组件如何适应应用程序行为有点困惑。在教程中,你不必做太复杂的事情,但在真正的应用程序中实现时,事情似乎有所不同。

    导航前

    在实现导航之前,我必须手动运行片段事务。为了做到这一点,我的片段将实现一个接口 onFragmentAction 通过了一个 bundle 到主管道 Activity 在基于动作的活动中,用另一个片段替换当前片段。

    第二个需要处理的部分是顶部工具栏和 BottomAppBar . 例如 底部应用程序栏 需要有 FAB 在某些片段上排列不同或隐藏在其他片段中。也是最上面的 ToolBar 需要对某些内容进行扩展或对其他内容进行折叠。为了做到这一点,我听了 FragmentManager.OnBackStackChangedListener 基于fragment标签 getSupportFragmentManager().getBackStackEntryAt(size - 1).getName() 相应地更改布局。

    带导航功能

    第一部分似乎很容易做到:传递参数并开始新的片段。但是我不知道导航是否可以处理工具栏管理,或者我需要在我的活动中继续管理它。

    4 回复  |  直到 6 年前
        1
  •  2
  •   Alex    6 年前

    findNavController(nav_host_fragment).addOnNavigatedListener { controller, 
     destination ->
     when(destination.id) {
        R.id.destination1 -> {
            //Do something with your toolbar or BottomAppBar
        }
        R.id.destination2 -> {
            //Do something with your toolbar or BottomAppBar
        }
    
     }
    }
    
        2
  •  5
  •   Kayvan N    6 年前

        3
  •  1
  •   Nhật Trần    6 年前

    enter image description here

        4
  •  0
  •   Nurseyit Tursunkulov    6 年前

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        return 
           item.onNavDestinationSelected(findNavController(R.id.nav_host_fragment))
                || super.onOptionsItemSelected(item)
    }
    
    
    <item android:id="@+id/dailyInfoFragment"
          android:title="@string/action_settings"
          android:orderInCategory="100"
          app:showAsAction="never"/>
    
    
        <fragment
            android:id="@+id/dailyInfoFragment"
            android:name="com.example.sonyadmin.infoPerDay.DailyInfoFragment"
            android:label="fragment_daily_info"
            tools:layout="@layout/fragment_daily_info"
            />