通过活动,我可以轻松设置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);
答案 0 :(得分:5)
您可以声明Activity
有Dialog
主题。看看这个问题: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);