Внутри Android Dialog, как настроить onActivityResult для запуска ActiveForResult? - PullRequest
18 голосов
/ 27 августа 2011

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

Ответы [ 5 ]

5 голосов
/ 23 июля 2012

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

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

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

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

3 голосов
/ 03 июня 2014

если ваш диалог является фрагментом диалога, вы можете использовать

getActivity().startActivityForResult(intent);

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

1 голос
/ 17 сентября 2014

Вы можете использовать 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 , вы увидите "привет" Войдите в свой Активность

0 голосов
/ 24 сентября 2016

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

parentActivity.startActivityForResult(intent, CODE);
0 голосов
/ 21 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...