【发布时间】:2018-12-07 10:05:11
【问题描述】:
我的 Android 应用有 2 个活动。登录屏幕和搜索屏幕。当我在模拟器或设备上部署应用程序时,我看到同一个应用程序的 2 个图标。当我点击图标 1 时,它会打开屏幕 1(登录屏幕),当我点击图标 2 时,它会打开屏幕 2(搜索屏幕)。按逻辑,当我登录时,它应该显示搜索屏幕。不知道我什么时候犯了错误。
【问题讨论】:
标签: android
我的 Android 应用有 2 个活动。登录屏幕和搜索屏幕。当我在模拟器或设备上部署应用程序时,我看到同一个应用程序的 2 个图标。当我点击图标 1 时,它会打开屏幕 1(登录屏幕),当我点击图标 2 时,它会打开屏幕 2(搜索屏幕)。按逻辑,当我登录时,它应该显示搜索屏幕。不知道我什么时候犯了错误。
【问题讨论】:
标签: android
您的清单文件应该只在您希望有图标的活动中包含这一行:
<category android:name="android.intent.category.MAIN" />
根据您的描述,听起来这两个活动都有这条线。
【讨论】:
MAIN 不是一个类别;这是一个动作。更一般地说,除非您需要,否则不要在清单中包含活动的 <intent-filter>。对于简单的应用,只有在启动器中需要图标的 Activity 才应该有 <intent-filter>。
在您的 mainfest 文件中,当您当时在两个不同的活动标签中有以下标签时,Android 应用程序似乎被安装了两次。
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
【讨论】:
@Adrian C 对他的回答发表的评论解决了我们的问题。
我们的主应用程序的清单文件只有一个intent-filter 标记,仅指定一个活动作为应用程序的启动器活动。
所以我不得不深入研究......
我们包含了库项目(幸运的是由我们编写的),其中一个库项目的清单文件在其活动上具有 intent-filter 标记,将该活动指定为启动器活动。
当我们随后将该库项目包含在我们的主应用程序中(它有自己的 intent-filter 指定启动器活动)时,完整的源代码看到两个 intent-filter 标记将两个活动指定为启动器活动,因此两个应用程序图标是已创建。
当我们在库项目中删除指定启动器活动的intent-filter 时,第二个应用启动器图标消失了。
【讨论】: