据我了解您的问题,不,这是不可能的。这是因为 Android 联系人框架将添加和选择视为逻辑上不同的操作,应该以不同的意图启动。如果您使用意图 Intent.ACTION_PICK 启动联系人选择器,您将看到联系人 UI 的选择器特定版本,其中包含与此操作无关的所有内容(例如添加或删除联系人)。
要了解为什么不能这样做,请查看股票联系人应用程序的代码,地址为 ContactsListActivity。根据启动活动的意图,它可能处于代码中定义的几种“模式”之一,这些“模式”控制 UI 如何呈现自身以及允许哪些行为。如果您查看活动的 onCreate() 方法,您会看到:
(注意,我正在查看 Android 2.3.7 源代码,地址为 GrepCode)
mMode = MODE_UNKNOWN;
if (UI.LIST_DEFAULT.equals(action) || UI.FILTER_CONTACTS_ACTION.equals(action)) {
mMode = MODE_DEFAULT;
[...]
} else if (Intent.ACTION_PICK.equals(action)) {
// XXX These should be showing the data from the URI given in
// the Intent.
final String type = intent.resolveType(this);
if (Contacts.CONTENT_TYPE.equals(type)) {
mMode = MODE_PICK_CONTACT;
}
[...]
所以我们看到 Intent.ACTION_PICK 的意图是 UI 被置于“选择器”模式。然后再往下看:
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// If Contacts was invoked by another Activity simply as a way of
// picking a contact, don't show the options menu
if ((mMode & MODE_MASK_PICKER) == MODE_MASK_PICKER) {
return false;
}
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.list, menu);
return true;
}
这就是为什么在您启动联系人选择器时没有选项菜单的原因 - UI 选择以某种方式呈现自己,因为您在启动选择器时的假定意图是,即仅选择。
如果您想要添加一个联系人,您需要以不同的意图启动联系人,特别是 Intent.ACTION_INSERT_OR_EDIT。 (在 onCreate() 中,您将看到与上面类似的部分,如果收到此意图,则将活动的模式设置为“添加/编辑”值。)