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

Android Studio Java项目点击选项菜单报ResourcesNotFoundException崩溃

错误根因

你遇到的Resources$NotFoundException崩溃,是系统加载菜单资源时找不到对应ID的drawable文件导致的,从错误堆栈可以定位到问题出在解析mymenu.xml里的菜单项图标阶段。

解决方案

按优先级依次排查修改:

  • 检查drawable资源存放路径
    确认basketball、butterfly两个图片资源存放在通用的res/drawable目录下,不要仅存放在drawable-v24等带版本限定的目录中。如果你的应用最低兼容版本低于24,高版本限定目录下的资源在低版本系统运行时会找不到,直接触发该报错。
  • 检查资源文件名合法性
    确保图片文件名全为小写、无空格或特殊字符,和mymenu.xml中引用的@drawable/basketball、@drawable/butterfly完全一致,Android的资源文件名大小写敏感,拼写不一致也会触发资源找不到错误。
  • 清理重建项目消除缓存异常
    如果确认资源存放和命名都没问题,大概率是Android Studio的构建缓存异常导致资源ID不匹配,点击顶部菜单栏Build > Clean Project,再执行Rebuild Project后重新运行即可。
  • 修复SecondScreenActivity逻辑漏洞
    你当前SecondScreenActivity里的switch分支没有加break,会出现选中Animals分类时,先执行Animals的赋值逻辑,再继续执行Sport的赋值逻辑,导致最终内容被覆盖,修改后的代码如下:
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

public class SecondScreenActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second_screen);

        TextView tvCat = findViewById(R.id.tvCat);
        ImageView ivPic = findViewById(R.id.ivPic);

        Intent intent = getIntent();
        String option = intent.getStringExtra(FirstScreenActivity.EXTRA_OPTION);

        switch(option)
        {
            case "Animals":
                tvCat.setText("Animals");
                tvCat.setTextSize(30);
                ivPic.setImageResource(R.drawable.butterfly);
                break;
            case "Sport":
                tvCat.setText("Sport");
                tvCat.setTextSize(30);
                ivPic.setImageResource(R.drawable.basketball);
                break;
        }
    }
}

可选优化:强制显示溢出菜单图标

Android默认会隐藏溢出菜单(即你设置app:showAsAction="never"的菜单项)的图标,如果你需要溢出菜单也显示图标,可以在FirstScreenActivity的onCreateOptionsMenu方法中加入反射逻辑实现,修改后的代码如下:

package com.example.myapplication;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import java.lang.reflect.Method;

public class FirstScreenActivity extends AppCompatActivity {
    public static final String EXTRA_OPTION="category";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first_screen);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.mymenu,menu);
        // 强制显示溢出菜单图标
        if(menu.getClass().getSimpleName().equals("MenuBuilder")){
            try{
                Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
                m.setAccessible(true);
                m.invoke(menu, true);
            } catch (Exception e){
                e.printStackTrace();
            }
        }
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        String option = "default";
        switch(item.getItemId())
        {
            case R.id.Animals:
                option = "Animals";
                break;
            case R.id.Sport:
                option = "Sport";
                break;
        }
        Intent intent = new Intent(this, SecondScreenActivity.class);
        intent.putExtra(EXTRA_OPTION,option);
        startActivity(intent);
        finish();
        return true;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:24:07