Подтвердить что ты не робот

Внутри Android Dialog, как настроить onActivityResult для startActivityForResult?

Из активности я могу легко настроить onActivityResult() и вызвать 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);
4b9b3361

Ответ 1

Вы можете объявить свою Activity тему Dialog. Посмотрите на этот вопрос SO: Активность Android как диалог

Вы изменили бы это в своем файле AndroidManifest.xml:

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

Вы можете использовать startActivityForResult() как обычно. Я знаю, что программа BluetoothChat для Android использует что-то похожее, чтобы вернуть устройство Bluetooth, которое вы выбрали из списка Dialog.

Ответ 2

если в диалоговом окне вы можете использовать

getActivity().startActivityForResult(intent);

таким образом результат отправляется в действие, которое создало диалог

Ответ 3

Вы можете использовать DialogFragment вместо диалога. Потому что диалог является вторичным по отношению к его активности. Когда вы начинаете свою деятельность с помощью startActivityForResult(), ваш диалог отклоняется

Другой пример Используйте обратный вызов

Создать Интерфейс

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

Создать Диалоговое окно

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

Выход

Когда вы отпустите Диалоговый фрагмент, вы увидите "привет" Войдите в свой Активность

Ответ 4

Используйте пакет совместимости, затем создайте свое диалоговое окно с помощью диалогового окна

Ответ 5

В конструкторе диалога передайте ссылку родительской активности, затем вы можете использовать в диалоговом окне, подобном этому,

parentActivity.startActivityForResult(intent, CODE);