1. 设置OptionMenu后不显示
问题: 在res目录下创建了menu的xml文件,并在onCreate()方法中实现了onCreateOptionsMenu方法后仍然不显示OptionMenu
解决方法: 查看AndroidManifest.xml文件中的android:theme属性的主题是否支持optionmenu,我这个一开始是不支持的,将主题更换为Theme.AppCompat.DayNight就解决了。
2. 运行Github项目失败,报错说AGP版本问题
问题: 运行github上的项目时报了以下错误,这是我第二次遇到这个问题,之前遇到解决后没有记录,这次记录下来,下面是报错信息:
The project is using an incompatible version (AGP 8.4.0) of the Android Gradle plugin. Latest supported version is AGP 8.3.0
这个错误是因为项目正在使用的Android Gradle插件(AGP)版本与当前支持的版本不兼容。错误信息显示项目使用的是AGP 8.4.0版本,而当前支持的最高版本是AGP 8.3.0。
解决办法: 通过降级gradle文件夹下的libs.versions.toml 文件中的 agp 版本来解决,将其从8.4.0降级为8.3.0即可解决问题。
3. 在适配器Adapter中发送广播遇到的大坑
相关内容: Android8.0及以上系统关于广播的规定:对隐式广播做了限定,如果targetSdkVersion >=26,在Manifest里面注册的Receiver可能无法接收到广播消息,需要指明广播接收器。如果是再同一个包内接收广播,在发送广播时需要添加广播接收器的完整包路径和全类路径名,查看ComponentName类的源码,该类的介绍上说明要设置接收类所在的包名和类名。可以参考下面的代码。
问题: 最近尝试在Adapter中发送广播,死活都不行,问题都没法找,不知道是发送的问题还是接收的问题。自己一开始的发送广播代码是人工智能提供的代码,如下所示:
Intent intent = new Intent("com.example.calculator.MY_BROADCAST");
//给intent加上下面的setComponent也不行
// intent.setComponent(new ComponentName("com.example.calculator","com.example.calculator.MyBroadcastReceiver"));
// 获取LocalBroadcastManager实例
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(v.getContext());
// 发送广播
localBroadcastManager.sendBroadcast(intent);
这段代码反正就是不行,即使给intent设置setComponent也不行。
解决办法: 最后在互联网上苦求无果,想起了之前了解的sendBroadcast()方法好像是Context提供的,然后又看见上面的LocalBroadcastManager中使用了一个v.getContext(),我就抱着试一试的心态把LocalBroadcastManager全删了,换成了以下代码:
Intent intent = new Intent("com.example.calculator.MY_BROADCAST");
// 指定广播接收器的组件名
intent.setComponent(new ComponentName("com.example.calculator",
"com.example.calculator.MyBroadcastReceiver"));
v.getContext().sendBroadcast(intent);
然后就成功了,纯属碰巧啊,在这个问题上耽误了挺长时间的。