Android Studio - 链接活动
Android Studio - linking activies
我是 Kotlin 的新手,我能够让导航抽屉工作。这是代码,但我不知道如何让菜单项在单击时打开一个新的 activity。
package com.example.navigationdrawer
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Gravity
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{
when (it.itemId) {
R.id.nav_home -> {
true
}
}
true
}
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 {
super.onOptionsItemSelected(item)
return when (item.itemId) {
android.R.id.home -> {
drawer.openDrawer(GravityCompat.START)
true
}
else -> super.onOptionsItemSelected(item)
}
}
}
这是我的 main_menu.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_home"
android:icon="@drawable/ic_menu_camera"
android:title="@string/menu_home" />
<item
android:id="@+id/nav_gallery"
android:icon="@drawable/ic_menu_gallery"
android:title="@string/menu_gallery" />
<item
android:id="@+id/nav_slideshow"
android:icon="@drawable/ic_menu_slideshow"
android:title="@string/menu_slideshow" />
<item
android:id="@+id/nav_tools"
android:icon="@drawable/ic_menu_manage"
android:title="@string/menu_tools" />
</group>
</menu>
我已经找了好几个小时了,但找不到向我展示如何完成此操作的教程。任何帮助将不胜感激。
您在代码中使用了不正确的 ID
在你的 kotlin 代码中你需要设置监听器来决定 菜单项被点击是这样的:
navView.setNavigationItemSelectedListener { menuItem ->
when (menuItem.itemId) {
R.id.nav_home -> {
Toast.makeText(this, "Home", Toast.LENGTH_SHORT).show()
true
}
R.id.nav_gallery -> {
Toast.makeText(this, "Gallery", Toast.LENGTH_SHORT).show()
true
}
R.id.nav_slideshow -> {
Toast.makeText(this, "Slide show", Toast.LENGTH_SHORT).show()
true
}
else -> {
false
}
}
}
}
有关 kotlin 中更详细的示例,请查看 this
如果您使用的是 Jetpack 导航组件,请检查 this
我是 Kotlin 的新手,我能够让导航抽屉工作。这是代码,但我不知道如何让菜单项在单击时打开一个新的 activity。
package com.example.navigationdrawer
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Gravity
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{
when (it.itemId) {
R.id.nav_home -> {
true
}
}
true
}
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 {
super.onOptionsItemSelected(item)
return when (item.itemId) {
android.R.id.home -> {
drawer.openDrawer(GravityCompat.START)
true
}
else -> super.onOptionsItemSelected(item)
}
}
}
这是我的 main_menu.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_home"
android:icon="@drawable/ic_menu_camera"
android:title="@string/menu_home" />
<item
android:id="@+id/nav_gallery"
android:icon="@drawable/ic_menu_gallery"
android:title="@string/menu_gallery" />
<item
android:id="@+id/nav_slideshow"
android:icon="@drawable/ic_menu_slideshow"
android:title="@string/menu_slideshow" />
<item
android:id="@+id/nav_tools"
android:icon="@drawable/ic_menu_manage"
android:title="@string/menu_tools" />
</group>
</menu>
我已经找了好几个小时了,但找不到向我展示如何完成此操作的教程。任何帮助将不胜感激。
您在代码中使用了不正确的 ID 在你的 kotlin 代码中你需要设置监听器来决定 菜单项被点击是这样的:
navView.setNavigationItemSelectedListener { menuItem ->
when (menuItem.itemId) {
R.id.nav_home -> {
Toast.makeText(this, "Home", Toast.LENGTH_SHORT).show()
true
}
R.id.nav_gallery -> {
Toast.makeText(this, "Gallery", Toast.LENGTH_SHORT).show()
true
}
R.id.nav_slideshow -> {
Toast.makeText(this, "Slide show", Toast.LENGTH_SHORT).show()
true
}
else -> {
false
}
}
}
}
有关 kotlin 中更详细的示例,请查看 this
如果您使用的是 Jetpack 导航组件,请检查 this