Android调用Fragment.hasOptionsMenu()出现同库组前缀报错如何解决
报错原因
Fragment.hasOptionsMenu can only be called from within the same library group prefix (referenced groupId=androidx.fragment with prefix androidx from groupId=Personal Pocket Dictionary)
上述报错属于Lint规则校验提示,不是代码编译或运行错误:hasOptionsMenu()方法被 androidx.fragment 库使用@RestrictTo(LIBRARY_GROUP_PREFIX)注解修饰,官方明确限定该方法只能在 androidx.fragment 库组内部调用,应用层代码直接调用就会触发该校验。该报错和你配置的fragment依赖无关,无需调整依赖导入。
解决方法
- 方案1:替换为官方公开API(最推荐)
如果你需要设置Fragment是否展示选项菜单,直接调用公开方法setHasOptionsMenu(true/false)即可,无调用限制。如果你需要读取当前Fragment的选项菜单状态,改用公开方法isMenuVisible()做判断即可。 - 方案2:自定义状态记录
在你项目的Fragment基类中添加自定义成员变量记录选项菜单开启状态,对外暴露公开的读取方法,后续业务代码直接读取自定义变量即可,完全绕开内部限制方法调用。 - 方案3:临时跳过Lint校验(仅推荐临时调试使用)
在调用hasOptionsMenu()的代码行上方添加注解@SuppressLint("RestrictedApi"),也可以在方法或类级别添加该注解,即可跳过该限制校验。注意该方案存在兼容风险,后续fragment库版本升级如果调整了该内部方法的逻辑,可能导致业务代码异常。

内容的提问来源于stack exchange,提问作者Hamid Ebadi
相关产品推荐
相关产品推荐

