21

アクティビティから簡単にonActivityResult()呼び出しstartActivityForResult()をセットアップでき、すべて正常に動作します。

startActivityForResult()ここで、Dialogから呼び出す必要があります。しかし、 をセットアップできません。は ではないonActivityResult()と思います。 DialogActivity

どうすれば結果を取得できますか?

ダイアログ内でこのようなことを試みましたが、失敗しました。

//create new Intent
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, m_PicUri);
((Activity) getContext()).startActivityForResult(intent, Const.TAKE_PIC_ACTIVITY_RET_CODE);
4

5 に答える 5

6

テーマActivityを持つことを宣言できます。Dialogこの SO の質問を調べてください:ダイアログとしての Android アクティビティ

AndroidManifest.xmlファイルでこれを変更します。

<activity android:theme="@android:style/Theme.Dialog" />

startActivityForResult()普通に使えるはずです。BluetoothChatサンプルの Android プログラムでは、リストから選択した Bluetooth デバイスを返すために似たようなものを使用していることを知っていますDialog

于 2012-07-23T06:36:00.810 に答える
4

ダイアログが使用できるダイアログフラグメントである場合

getActivity().startActivityForResult(intent);

このようにして、ダイアログを作成したアクティビティに結果が送信されます

于 2014-06-02T21:18:32.403 に答える
3

Dialog の代わりにDialogFragmentを使用できます。ダイアログはそのアクティビティの二次的なものだからです。startActivityForResult() でアクティビティを開始すると、ダイアログが閉じられます

コールバックを使用する別の例

インターフェイスの作成

 public interface DialogCallback {
   void getResults(String results);
 }

ダイアログフラグメントの作成

public class DialogFragment extends DialogFragment {

DialogCallback dialogCallback;

public DialogFragment setCallBack(DialogCallback dialogCallback){
    this.dialogCallback = dialogCallback;
    return this;
}

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    return super.onCreateDialog(savedInstanceState);
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.your_layout, container, false);
    return view;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public void onDismiss(DialogInterface dialog) {
    super.onDismiss(dialog);
    dialogCallback.getResults("hello");
}

}

あなたのアクティビティで

@Override
protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     new DialogFragment().setCallBack(dialogCallback).show(getFragmentManager(),"");
}

DialogCallback dialogCallback = new DialogCallback() {
    @Override
    public void getResults(String results) {
        if(results!=null){
            Log.e(TAG,results);
        }
    }
};

出力

DialogFragmentを閉じると、アクティビティに「hello」ログが表示されます

于 2014-09-17T02:50:36.353 に答える
2

互換性パッケージを使用してから、DialogFragment を使用してダイアログを構築します

于 2011-11-20T20:54:16.017 に答える