相关文章推荐
机灵的乌冬面  ·  创建SparkSession ...·  9 月前    · 
淡定的香烟  ·  Node.js ...·  1 年前    · 
成熟的小熊猫  ·  成功解决ERROR: FAILED ...·  1 年前    · 
踢足球的剪刀  ·  Qt for ...·  2 年前    · 

如何在Kotlin中使用活动实现底部导航

0 人关注

当导航栏上的一个项目被点击时,我试图使用startActivity(intent)时出现了错误。我的代码是怎么写的?

class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding private lateinit var firebaseAuth: FirebaseAuth override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) firebaseAuth = FirebaseAuth.getInstance() binding.logout.setOnClickListener { firebaseAuth.signOut() val intent = Intent(this, Login::class.java) startActivity(intent) //here is the buttom Nav bar, the setOnNavItemListener is also striken through binding.bottomNavView.setOnNavigationItemSelectedListener { when(it.itemId){

当我尝试启动另一个活动时,错误出现在这里。

                R.id.drinks -> startActivity(this, drinks::class.java)
                R.id.profileScreen ->
                R.id.others ->
    
android
kotlin
godopetza
godopetza
发布于 2022-05-28
1 个回答
ajhavery
ajhavery
发布于 2022-05-28
已采纳
0 人赞同

下面是一个使用Kotlin实现Bottom Nav的最佳实践模型。

现在底部导航与导航控制器集成在一起

底部导航以片段的概念工作。

点击底部导航项时出现的每个页面都被称为片段。

底部导航项目 = 片段

创建菜单项

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
        android:id="@+id/home"
        android:title="@string/home"
        android:icon="@drawable/ic_baseline_home_24"/>
        android:id="@+id/message"
        android:title="@string/messages"
        android:icon="@drawable/ic_baseline_message_24"/>
        android:id="@+id/profile"
        android:title="@string/profile"
        android:icon="@drawable/ic_baseline_profile_24"/>
</menu>

在活动main.xml中添加底部导航

<com.google.android.material.bottomnavigation.BottomNavigationView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

添加导航资源文件

在bottom_nav.xml中,添加3个片段--主页、信息和个人资料。

所有这3个都是顶级片段,彼此之间没有联系。

重要的是。确保导航资源文件中片段的ID与菜单项的ID相同。

在活动Main.xml中添加导航主机片段

拖放--导航主机片段到活动main.xml中,并将上一步创建的bottom_nav.xml加入其中。

在活动main.xml的底部导航组件中,添加app:menu="@menu/bottom_menu"来链接菜单。

<androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragmentContainerView"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toTopOf="@id/bottomNavigationView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/my_nav"
    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottomNavigationView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:menu="@menu/bottom_menu"
        android:background="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

主要活动.kt

我们需要在MainActivity文件中激活各自的菜单

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // Setting bottom nav with nav controller
        val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottomNavigationView)