4

如何使由Intent.createChooser()可取消创建的对话框?换句话说:当我在对话框之外点击时,我需要将其取消。

默认情况下它是这样工作的。但在某些设备(如三星 GT2)上却不是(此对话框只能通过按下back按钮取消)。

注意我说的是由Intent.createChooser(). 我没有参考Dialog它自己。

4

2 回答 2

2

我同意 Yul 的观点——这是不可能的,除非创建自己的选择器。queryIntentActivities()可以为您提供列表的内容,并且您可以根据需要设计对话框。这是一个示例项目,用于queryIntentActivities()填充ListView所有LAUNCHER活动,然后使用该数据启动点击条目。

就个人而言,由于大多数设备已经有这种行为,我不会打扰。自原始设备以来,我一直在使用 Android,并且在阅读您的问题之前,我没有意识到可以通过对话框的取消按钮(在旧设备上)和 BACK 按钮以外的方式取消此对话框。我怀疑您的用户群是否会介意您的应用程序在选择器行为方面与他们设备上的所有其他应用程序的行为相同。

于 2012-11-08T10:47:39.693 回答
1

如果您正在这样做,startActivityForResult那么您可以获取resultCode并测试它是否是RESULT_CANCELED.

在Getting a Result from an Activity 的培训文档Activity本身的文档中有更多信息。

在无耻地从上述文档中借用示例的同时,我将向您展示我是如何做到的:

static final int PICK_CONTACT_REQUEST = 1;

private void pickContact() {
    Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts"));
    pickContactIntent.setType(Phone.CONTENT_TYPE);
    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        ...
    } else if (resultCode == RESULT_CANCELED){
        ...
    }
}
于 2014-06-04T21:23:09.337 回答