将片段中的菜单图标添加到主机活动工具栏 - 导航组件
Add menu icons from fragement into host actvity toolbar - Navigation component
我正在使用单个 activity 导航组件结构。
在主机 activity iam 中使用导航抽屉和底部导航。
所以底部导航中有 2 个片段 片段 A 和 片段 B。
我需要为 Fragment A 添加菜单图标(搜索图标),为 Fragment B 添加(聊天图标)。
那么我如何从片段 在主机 Activity 工具栏上添加这些图标?
主机Activity
private fun setupViews()
{
drawerLayout = binding.drawerLayout
// Finding the Navigation Controller
navController = findNavController(R.id.hostFragmentLanding)
// Setting Navigation Controller with the BottomNavigationView
binding.bottomNavView.setupWithNavController(navController)
appBarConfiguration = AppBarConfiguration(topLevelDestinationIds = TOP_LEVEL_DESTINATIONS, drawerLayout)
// Set up ActionBar
setSupportActionBar(binding.toolBar)
setupActionBarWithNavController(navController, appBarConfiguration)
binding.navigationView.setupWithNavController(navController)
}
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}
override fun onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START)
} else {
super.onBackPressed()
}
}
host_activity_xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:fitsSystemWindows="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="0dp"
android:fitsSystemWindows="true">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolBar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:title=""
app:theme="@style/ToolbarTheme"
>
<ImageView
android:id="@+id/logo"
android:layout_width="97dp"
android:layout_height="@dimen/dp_20"
android:src="@drawable/logo_sportsal"
android:layout_gravity="center"
/>
</androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>
<fragment
android:id="@+id/hostFragmentLanding"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:navGraph="@navigation/navigation_landing" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
style="@style/Widget.MaterialComponents.BottomNavigationView"
app:menu="@menu/bottom_navigation_menu"
/>
</LinearLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/navigation_view"
style="@style/Widget.MaterialComponents.NavigationView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start" />
</androidx.drawerlayout.widget.DrawerLayout>
我想将 Fragment A 中的菜单(搜索)图标添加到主机activity 工具栏
我直接从片段中添加了菜单图标 class
片段A
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setHasOptionsMenu(true)
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.menu_home_fragment, menu)
menu.findItem(R.id.search).isVisible = false
menu.findItem(R.id.qrScan).isVisible = false
menu.findItem(R.id.notification).isVisible = true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.search) {
}
return super.onOptionsItemSelected(item)
}
因此菜单项已自动添加到主机活动工具栏
我遇到了同样的问题,这个 anwser 解决了我的问题
我已经覆盖了我的片段中的 onCreateOptionsMenu 和 onOptionsItemSelected 函数,并且图标没有显示在工具栏中。我只需要将这些行添加到 activity
中的 onCreate 方法
setSupportActionBar(binding.activityMainToolbar);
getSupportActionBar()?.setDisplayShowTitleEnabled(false);
我正在使用单个 activity 导航组件结构。 在主机 activity iam 中使用导航抽屉和底部导航。
所以底部导航中有 2 个片段 片段 A 和 片段 B。 我需要为 Fragment A 添加菜单图标(搜索图标),为 Fragment B 添加(聊天图标)。
那么我如何从片段 在主机 Activity 工具栏上添加这些图标?
主机Activity
private fun setupViews()
{
drawerLayout = binding.drawerLayout
// Finding the Navigation Controller
navController = findNavController(R.id.hostFragmentLanding)
// Setting Navigation Controller with the BottomNavigationView
binding.bottomNavView.setupWithNavController(navController)
appBarConfiguration = AppBarConfiguration(topLevelDestinationIds = TOP_LEVEL_DESTINATIONS, drawerLayout)
// Set up ActionBar
setSupportActionBar(binding.toolBar)
setupActionBarWithNavController(navController, appBarConfiguration)
binding.navigationView.setupWithNavController(navController)
}
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}
override fun onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START)
} else {
super.onBackPressed()
}
}
host_activity_xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:fitsSystemWindows="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="0dp"
android:fitsSystemWindows="true">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolBar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:title=""
app:theme="@style/ToolbarTheme"
>
<ImageView
android:id="@+id/logo"
android:layout_width="97dp"
android:layout_height="@dimen/dp_20"
android:src="@drawable/logo_sportsal"
android:layout_gravity="center"
/>
</androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>
<fragment
android:id="@+id/hostFragmentLanding"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:navGraph="@navigation/navigation_landing" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
style="@style/Widget.MaterialComponents.BottomNavigationView"
app:menu="@menu/bottom_navigation_menu"
/>
</LinearLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/navigation_view"
style="@style/Widget.MaterialComponents.NavigationView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start" />
</androidx.drawerlayout.widget.DrawerLayout>
我想将 Fragment A 中的菜单(搜索)图标添加到主机activity 工具栏
我直接从片段中添加了菜单图标 class
片段A
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setHasOptionsMenu(true)
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.menu_home_fragment, menu)
menu.findItem(R.id.search).isVisible = false
menu.findItem(R.id.qrScan).isVisible = false
menu.findItem(R.id.notification).isVisible = true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.search) {
}
return super.onOptionsItemSelected(item)
}
因此菜单项已自动添加到主机活动工具栏
我遇到了同样的问题,这个 anwser 解决了我的问题
我已经覆盖了我的片段中的 onCreateOptionsMenu 和 onOptionsItemSelected 函数,并且图标没有显示在工具栏中。我只需要将这些行添加到 activity
中的 onCreate 方法 setSupportActionBar(binding.activityMainToolbar);
getSupportActionBar()?.setDisplayShowTitleEnabled(false);