![](/img/trans.png)
[英]How to call startActivityForResult inside onActivityResult?
[英]inside Android Dialog, how to setup onActivityResult for startActivityForResult?
從一個活動,我可以輕松設置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);
您可以聲明您的Activity
具有Dialog
主題。 看看這個問題: Android Activity作為對話框
您可以在AndroidManifest.xml
文件中更改此設置:
<activity android:theme="@android:style/Theme.Dialog" />
您應該能夠像正常一樣使用startActivityForResult()
。 我知道BluetoothChat
示例Android程序使用類似的東西來返回您從Dialog
列表中選擇的藍牙設備。
如果您的對話框是可以使用的對話框片段
getActivity().startActivityForResult(intent);
以這種方式將結果發送到創建對話框的活動
您可以使用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時,您將看到“hello”登錄您的Activity
在對話框構造函數上傳遞父Activity的引用,然后你可以在這樣的對話框中使用,
parentActivity.startActivityForResult(intent, CODE);
使用兼容包,然后使用DialogFragment構建對話框
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.