Android Studio中如何通过ActionBar图标实现页面跳转?
ActionBar图标实现页面跳转的代码问题排查
我已经在Android Studio里配置了ActionBar,想通过ActionBar上的图标实现页面跳转。之前查资料说要用MenuItem,但我以为MenuItem只是ActionBar的下拉列表,可我只需要用图标。下面是我的代码,帮忙检查有没有问题,谢谢。
package com.example.submitfirst //import android.R import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.Menu import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import kotlin.collections.ArrayList class MainActivity : AppCompatActivity() { private lateinit var rvCat: RecyclerView private var list :ArrayList<Cat> = arrayListOf() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) rvCat= findViewById(R.id.rv_cat) rvCat.setHasFixedSize(true) list.addAll(CatData.listData) showRecycleList() val actBar = getSupportActionBar() actBar?.title = "Cat Show" val orange = resources.getColor(android.R.color.holo_blue_dark) actBar?.setBackgroundDrawable(ColorDrawable(orange)) } private fun showRecycleList(){ rvCat.layoutManager = LinearLayoutManager(this) val listCatAdapter= ListCatAdapter(list) rvCat.adapter = listCatAdapter } override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu, menu) val moveActivity: Menu = findViewById(R.id.menu_profile) return super.onCreateOptionsMenu(menu) } }
代码存在的问题及修正方案
MenuItem获取方式错误
你用findViewById(R.id.menu_profile)获取MenuItem是错误的,findViewById用于查找布局中的View,MenuItem需要从传入的menu对象中获取,且变量类型应为MenuItem而非Menu。缺少点击事件处理
仅加载菜单布局无法实现跳转,需要重写onOptionsItemSelected方法处理图标点击逻辑。MenuItem图标显示配置
你误解了MenuItem的用法:它不仅可以在下拉列表中显示,也能直接显示在ActionBar上,只需在菜单XML中配置app:showAsAction="always"(或ifRoom)即可。
修改后的完整代码
第一步:配置菜单XML(res/menu/menu.xml)
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/menu_profile" android:icon="@drawable/ic_profile" <!-- 替换为你的图标资源 --> android:title="个人中心" app:showAsAction="always" /> <!-- 设置此属性让图标显示在ActionBar上 --> </menu>
第二步:修改MainActivity代码
package com.example.submitfirst import android.graphics.drawable.ColorDrawable import android.content.Intent import android.os.Bundle import android.view.Menu import android.view.MenuItem import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import kotlin.collections.ArrayList class MainActivity : AppCompatActivity() { private lateinit var rvCat: RecyclerView private var list: ArrayList<Cat> = arrayListOf() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) rvCat = findViewById(R.id.rv_cat) rvCat.setHasFixedSize(true) list.addAll(CatData.listData) showRecycleList() val actBar = supportActionBar actBar?.title = "Cat Show" val orange = resources.getColor(android.R.color.holo_blue_dark) actBar?.setBackgroundDrawable(ColorDrawable(orange)) } private fun showRecycleList() { rvCat.layoutManager = LinearLayoutManager(this) val listCatAdapter = ListCatAdapter(list) rvCat.adapter = listCatAdapter } override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu, menu) return super.onCreateOptionsMenu(menu) } // 添加MenuItem点击事件处理 override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.menu_profile -> { // 此处替换为你要跳转的目标Activity val intent = Intent(this, ProfileActivity::class.java) startActivity(intent) true } else -> super.onOptionsItemSelected(item) } } }
内容的提问来源于stack exchange,提问作者dendi
相关产品推荐
相关产品推荐

