簡體   English   中英

在Android Dialog中,如何為startActivityForResult設置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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM