Must specify unique android:id, android:tag, or have a parent with an id for XXXXFragment

布局文件

<fragment
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:name="XXXFragment"></fragment>

发生的异常

Caused by: java.lang.IllegalArgumentException: 
Binary XML file line #8: Must specify unique android:id,
 android:tag, or have a parent with an id for XXXnFragment

官方文档有这样一句话

:每个片段都需要一个唯一的标识符,重启 Activity 时,系统可以使用该标识符来恢复片段(您也可以使用该标识符来捕获片段以执行某些事务,如将其移除)。 可以通过三种方式为片段提供 ID:

  • 为 android:id 属性提供唯一 ID。
  • 为 android:tag 属性提供唯一字符串。
  • 如果您未给以上两个属性提供值,系统会使用容器视图的 ID。

原因:没有添加id

解决办法:加上id

### 关于 `android:exported` 属性的要求 对于目标平台为 Android 12 及更高版本的应用程序,在编译过程中如果未为具有意图过滤器的组件(如 Activity、Service 或 BroadcastReceiver)显式声明 `android:exported` 属性,则会出现错误提示:Manifest merger failed : Apps targeting Android 12 and higher are required to specify an explicit value for android:exported when the corresponding component has an intent filter defined.[^1] 这意味着开发者需要明确指出应用程序中的每个组件是否可以被其他应用程序启动或访问。这不仅适用于带有 Intent Filter 的组件,而且从 Android 13 开始,即使是没有 Intent Filter 的四大组件也需要定义该属性[^3]。 #### 设置方法 为了满足这一要求,可以在 AndroidManifest 文件中相应地配置各个组件: ```xml <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <!-- 对于不需要外部应用直接调用的服务 --> <service android:name=".MyBackgroundService" android:exported="false"/> <!-- 广播接收者同样适用 --> <receiver android:name=".BootCompletedReceiver" android:exported="true"> <intent-filter> <!-- ... --> </intent-filter> </receiver> ``` 上述 XML 片段展示了如何通过设置 `android:exported=true|false` 来控制哪些组件能够接受来自其他应用程序的消息请求。当值设为 true 时表示允许跨进程通信;而 false 则表示仅限内部使用,不允许外界随意访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值