如何使Intent.createChooser()创建的对话框可取消?

时间:2012-11-01 11:23:45

标签: android

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

默认情况下,它的工作原理如下。但在某些设备上(如三星GT2)则不然(只有按back按钮才能取消此对话框。)

注意我说的是Intent.createChooser()创建的对话框。我没有提到Dialog本身。

2 个答案:

答案 0 :(得分:2)

我同意Yul - 除非创建自己的选择器,否则这是不可能的。 queryIntentActivities()可以为您提供列表的内容,您可以根据需要设计对话框。 Here is a sample project使用queryIntentActivities()填充ListViewLAUNCHER个活动,然后使用该数据启动点击后的条目。

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

答案 1 :(得分:1)

如果您使用startActivityForResult执行此操作,那么您可以获取resultCode并进行测试以查看它是否为RESULT_CANCELED

training documentation for Getting a Result from an Activitydocumentation for 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){
        ...
    }
}