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
相关产品推荐
相关产品推荐

