You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio Kotlin开发:导航抽屉菜单项点击跳转Activity问题

实现导航抽屉菜单项跳转Activity的方法

1. 提前创建目标Activity

首先在项目中创建好对应菜单项要跳转的Activity,比如对应nav_gallery创建GalleryActivity、nav_slideshow创建SlideshowActivity、nav_tools创建ToolsActivity,创建完成后系统会自动在AndroidManifest.xml中注册这些Activity,无需额外修改配置。

2. 修改MainActivity菜单项选中监听逻辑

你原有代码的setNavigationItemSelectedListener仅处理了主页项,现在补充跳转逻辑即可,跳转通过Intent实现,跳转后主动关闭抽屉优化交互体验,修改后的完整代码如下:

package com.example.navigationdrawer

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.MenuItem
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.core.view.GravityCompat
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        setSupportActionBar(findViewById(R.id.toolbar))

        navigation_view.setNavigationItemSelectedListener{ menuItem ->
            when (menuItem.itemId) {
                R.id.nav_home -> {
                    // 当前已是主页可不用跳转,按需加刷新逻辑即可
                    drawer.closeDrawer(GravityCompat.START)
                    true
                }
                R.id.nav_gallery -> {
                    startActivity(Intent(this@MainActivity, GalleryActivity::class.java))
                    drawer.closeDrawer(GravityCompat.START)
                    true
                }
                R.id.nav_slideshow -> {
                    startActivity(Intent(this@MainActivity, SlideshowActivity::class.java))
                    drawer.closeDrawer(GravityCompat.START)
                    true
                }
                R.id.nav_tools -> {
                    startActivity(Intent(this@MainActivity, ToolsActivity::class.java))
                    drawer.closeDrawer(GravityCompat.START)
                    true
                }
                else -> false
            }
        }

        val drawerToggle = ActionBarDrawerToggle(this, drawer, R.string.open, R.string.close)
        drawer.addDrawerListener(drawerToggle)
        drawerToggle.syncState()

        supportActionBar?.setDisplayHomeAsUpEnabled(true)
    }

    override fun onBackPressed() {
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START)
        } else {
            super.onBackPressed()
        }
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        return when (item.itemId) {
            android.R.id.home -> {
                drawer.openDrawer(GravityCompat.START)
                true
            }
            else -> super.onOptionsItemSelected(item)
        }
    }
}

3. 可选优化

如果不想每次点击菜单项都重复创建相同的Activity,可以在跳转前判断当前运行的Activity是否为目标Activity,避免冗余实例生成。

内容的提问来源于stack exchange,提问作者Twiggit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:51:00