Android BottomNavigation 未使用导航控制器正确突出显示

Dex*_*ter 4 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)
    }


}
Run Code Online (Sandbox Code Playgroud)

为了 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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

use*_*280 9

尝试使用导航用户界面。

implementation 'androidx.navigation:navigation-ui:' + navigationVersion //currently 1.0.0-alpha05
Run Code Online (Sandbox Code Playgroud)

在活动中

    navController = Navigation.findNavController(this, R.id.nav_host)
    NavigationUI.setupWithNavController(bottomNavigation, navController)
Run Code Online (Sandbox Code Playgroud)

并确保您的片段 ID 与菜单 ID 匹配。

<item
        android:id="@+id/homeFragment"
        android:title="Home"/>
Run Code Online (Sandbox Code Playgroud)

  • 我只想在此答案中添加更多信息,即您需要在“R.menu.navigation”和“R.navigation.my_navigation_file”中具有相同的片段 ID 才能使导航 UI 正常工作!我花了 3-4 个小时在众多博客上搜索,终于明白了这一点:) (8认同)