2011-08-27 60 views
16

從一項活動中,我可以輕鬆設置onActivityResult()並致電startActivityForResult(),一切正常。裏面的Android對話框,如何設置onActivityResult for startActivityForResult?

現在,我需要從對話框中調用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

請提供創建和啓動對話框的代碼。 – Jin35

+0

@ tony-p-lee任何解決方案 –

回答

0

使用兼容包,然後使用DialogFragment

5

建立自己的對話框,您可以聲明Activity有一個Dialog主題。看這個SO問題:Android Activity as a dialog

你會在你的AndroidManifest.xml文件中更改此:

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

你應該能夠使用startActivityForResult()像正常。我知道BluetoothChat示例Android程序使用類似的東西來返回從Dialog列表中選擇的藍牙設備。

+0

這應該被標記爲答案。這是做你所期待的唯一方法。 –

+3

這不是答案。問題是「如何從對話框啓動活動結果()」。但不是「如何將活動聲明爲對話」。 – Cheung

2

如果你的對話框是一個對話框片段可以以這種方式使用

getActivity().startActivityForResult(intent); 

結果被髮送到創建對話框

1

可以使用DialogFragment,而不是對話的活動。因爲該對話是其次活動。當你開始用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你會看到「你好」登錄您的活動

0

在對話框的構造函數通過父Activity的引用,那麼你可以在這樣的對話框中使用,

parentActivity.startActivityForResult(intent, CODE); 
相關問題