Android BottomNavigation 未使用导航控制器正确突出显示
Android BottomNavigation is not highlighting properly with Navigation Controller
-
android
-
bottomnavigationview
-
android-architecture-components
-
android-jetpack
-
android-architecture-navigation
我正在尝试从 Android 架构组件实施 Nagivation。我能够成功地浏览我的片段。我试图将它附加到我的底部导航,但我无法正确使用它。我可以使用 Navigation.findNavController(View).navigate(R.id.Fragment)
在片段之间成功导航,但是当我使用任何 UI 组件或后退按钮执行此操作时,底部导航中的突出显示不会更改,如下面的 gif
所示
我的代码如下MainActivity.kt
,
class MainActivity : AppCompatActivity() {
private lateinit var navController: NavController
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.navigation_home -> {
navController.navigate(R.id.homeFragment)
return@OnNavigationItemSelectedListener true
}
R.id.navigation_dashboard -> {
navController.navigate(R.id.addEmotionFragment)
return@OnNavigationItemSelectedListener true
}
R.id.navigation_notifications -> {
return@OnNavigationItemSelectedListener true
}
}
false
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
navController = Navigation.findNavController(this, R.id.nav_host)
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
}
}
对于HomeFragment.kt
class HomeFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_home, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
button.setOnClickListener {
Navigation.findNavController(it).navigate(R.id.addEmotionFragment)
}
}
}
您需要在您的按钮中手动设置一个选中的 属性 点击像:
button.setOnClickListener {
Navigation.findNavController(it).navigate(R.id.addEmotionFragment)
.... (Over Here)
}
Java 代码为:
MenuItem menuItem = YourBottomViewObject.getMenu().getItem(1);
menuItemsetChecked(true);
MenuItem menuItem = YourBottomViewObject.getMenu().getItem(0);
menuItemsetChecked(false);
尝试使用导航-ui.
implementation 'androidx.navigation:navigation-ui:' + navigationVersion //currently 1.0.0-alpha05
在activity
navController = Navigation.findNavController(this, R.id.nav_host)
NavigationUI.setupWithNavController(bottomNavigation, navController)
并确保您的片段 ID 与菜单 ID 匹配。
<item
android:id="@+id/homeFragment"
android:title="Home"/>
android
bottomnavigationview
android-architecture-components
android-jetpack
android-architecture-navigation
我正在尝试从 Android 架构组件实施 Nagivation。我能够成功地浏览我的片段。我试图将它附加到我的底部导航,但我无法正确使用它。我可以使用 Navigation.findNavController(View).navigate(R.id.Fragment)
在片段之间成功导航,但是当我使用任何 UI 组件或后退按钮执行此操作时,底部导航中的突出显示不会更改,如下面的 gif
我的代码如下MainActivity.kt
,
class MainActivity : AppCompatActivity() {
private lateinit var navController: NavController
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.navigation_home -> {
navController.navigate(R.id.homeFragment)
return@OnNavigationItemSelectedListener true
}
R.id.navigation_dashboard -> {
navController.navigate(R.id.addEmotionFragment)
return@OnNavigationItemSelectedListener true
}
R.id.navigation_notifications -> {
return@OnNavigationItemSelectedListener true
}
}
false
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
navController = Navigation.findNavController(this, R.id.nav_host)
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
}
}
对于HomeFragment.kt
class HomeFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_home, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
button.setOnClickListener {
Navigation.findNavController(it).navigate(R.id.addEmotionFragment)
}
}
}
您需要在您的按钮中手动设置一个选中的 属性 点击像:
button.setOnClickListener {
Navigation.findNavController(it).navigate(R.id.addEmotionFragment)
.... (Over Here)
}
Java 代码为:
MenuItem menuItem = YourBottomViewObject.getMenu().getItem(1);
menuItemsetChecked(true);
MenuItem menuItem = YourBottomViewObject.getMenu().getItem(0);
menuItemsetChecked(false);
尝试使用导航-ui.
implementation 'androidx.navigation:navigation-ui:' + navigationVersion //currently 1.0.0-alpha05
在activity
navController = Navigation.findNavController(this, R.id.nav_host)
NavigationUI.setupWithNavController(bottomNavigation, navController)
并确保您的片段 ID 与菜单 ID 匹配。
<item
android:id="@+id/homeFragment"
android:title="Home"/>