在Android Dialog中,如何为startActivityForResult设置onActivityResult?

时间:2011-08-27 01:25:24

标签: android android-activity android-dialog

通过活动,我可以轻松设置onActivityResult()并致电startActivityForResult(),一切正常。

现在,我需要从Dialog中调用startActivityForResult()。但我无法设置onActivityResult(),我相信Dialog不是Activity

我如何得到结果?

我在对话框中尝试这样的东西但它失败了。

//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);

5 个答案:

答案 0 :(得分:5)

您可以声明ActivityDialog主题。看看这个问题:Android Activity as a dialog

您可以在AndroidManifest.xml文件中更改此内容:

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

您应该可以像平常一样使用startActivityForResult()。我知道BluetoothChat示例Android程序使用类似的东西来返回您从Dialog列表中选择的蓝牙设备。

答案 1 :(得分:2)

如果对话框是对话框片段,则可以使用

getActivity().startActivityForResult(intent);

以这种方式将结果发送到创建对话框的活动

答案 2 :(得分:1)

您可以使用DialogFragment代替Dialog。因为该对话框是其活动的次要对象。当您使用startActivityForResult()启动活动时,您的对话框将被解除

另一个示例使用回调

创建界面

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

创建 DialogFragment

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 时,您会看到&#34; hello&#34; 登录活动

答案 3 :(得分:0)

使用兼容包,然后使用DialogFragment

构建对话框

答案 4 :(得分:0)

在对话框构造函数上传递父Activity的引用,然后就可以在这样的对话框中使用

parentActivity.startActivityForResult(intent, CODE);