Внутри 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);
Ответы
Ответ 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);