Как получить результат из DialogFragment без упоминания имени класса активити вызвавшего данный диалог внутри реализации DialogFragment? Хотел бы реализовать некий универсальный класс диалога, который бы не зависел от вызвавшего его Activity. Пока не могу собрать (изобрести) велосипед на основе имеющихся у меня сведений. Получается, что для каждого активити приложения, которому требуется некий диалог нужно вводить отдельный класс DialogFragment, чтобы спросить пользователя о чем-нибудь?!
Все классические примеры которые я нашел в инете всегда упоминают имя класса вызвавшей DialogFragment активити.
Чтобы не затруднять форумчан лазанием по всяким докам, приведу классический пример для AlertDialog.
Код: Выделить всё
public static class MyAlertDialogFragment extends DialogFragment {
public static MyAlertDialogFragment newInstance(int title) {
MyAlertDialogFragment frag = new MyAlertDialogFragment();
Bundle args = new Bundle();
args.putInt("title", title);
frag.setArguments(args);
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
int title = getArguments().getInt("title");
return new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.alert_dialog_icon)
.setTitle(title)
.setPositiveButton(R.string.alert_dialog_ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((FragmentAlertDialog)getActivity()).doPositiveClick();
}
}
)
.setNegativeButton(R.string.alert_dialog_cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((FragmentAlertDialog)getActivity()).doNegativeClick();
}
}
)
.create();
}
}
Код: Выделить всё
void showDialog() {
DialogFragment newFragment = MyAlertDialogFragment.newInstance(
R.string.alert_dialog_two_buttons_title);
newFragment.show(getFragmentManager(), "dialog");
}
public void doPositiveClick() {
// Do stuff here.
Log.i("FragmentAlertDialog", "Positive click!");
}
public void doNegativeClick() {
// Do stuff here.
Log.i("FragmentAlertDialog", "Negative click!");
}
Код: Выделить всё
public void onClick(DialogInterface dialog, int whichButton) {
((FragmentAlertDialog)getActivity()).doNegativeClick();
}
Нежели для возврата результата, нужно знать, имя вызвавшей его Активити?! Мутно как-то.
И так во всех сниппетах, которые мне удалось найти.
PS: Кстати автор блога в уроке 110 http://startandroid.ru/ru/uroki/vse-uro ... ialog.html
поступил довольно хитро (мудро) выдав результат в этом же диалоге! А как передать результат диалога в вызвавшую его активити скромно умолчал Ведь диалоги в основном для того и служат, чтобы вернуть результат куда-то.