4

Intent.createChooser()キャンセル可能で作成したダイアログを作成するにはどうすればよいですか?つまり、このダイアログの外側をタップしているときは、キャンセルする必要があります。

デフォルトでは、このように機能しています。ただし、一部のデバイス(Samsung GT2など)ではそうではありません(このダイアログはbackボタンを押すだけでキャンセルできます)。

私はによって作成されたダイアログについて話しているIntent.createChooser()。私はそれ自体への言及を持っていませんDialog

4

2 に答える 2

2

私はユルに同意します-あなた自身のチューザーを作成することを除いて、これは不可能です。queryIntentActivities()リストの内容を表示でき、ダイアログを好きなようにデザインできます。これは、すべてのアクティビティのデータを入力し、そのデータを使用してクリックされたエントリを起動するために使用するサンプルプロジェクトです。queryIntentActivities()ListViewLAUNCHER

個人的には、ほとんどのデバイスがすでにこの動作をしているので、私は気にしません。私は元のデバイスからAndroidを使用していますが、質問を読むまで、このダイアログがダイアログの[キャンセル]ボタン(古いデバイスの場合)と[戻る]ボタン以外の方法でキャンセルできることに気づいていませんでした。私はあなたのユーザーベースがあなたのアプリがセレクターの振る舞いに関して彼らのデバイス上の他のすべてのアプリと同じように振る舞うことを気にするのではないかと疑っています。

于 2012-11-08T10:47:39.693 に答える
1

でこれを行っている場合はstartActivityForResult、を取得しresultCodeてテストし、それがであるかどうかを確認できますRESULT_CANCELED

これについての詳細は、アクティビティから結果を取得するためのトレーニングドキュメントとアクティビティ自体のドキュメントにあります。

上記のドキュメントから恥知らずに例を借りながら、私がそれをどのように行っているかを示します。

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 に答える