Ответ 1
Вы можете использовать setTargetFragment
и getTargetFragment
методов Fragment
. Вы можете установить Fragment
в качестве цели DialogFragment
, а затем получить ссылку на него из DialogFragment
.
Я пытаюсь сделать Fragment
, чтобы показать Dialog
, используя DialogFragment
API.
В моем диалоге есть только EditText
, и я хочу передать строку, написанную на ней, обратно в Fragment
.
Я могу показать диалог из Fragment
, но я не могу получить строку из поля ввода обратно в мой Fragment
.
Я попробовал оба способа создать диалог: перезапись метода DialogFragment.onCreateView
и запись всего диалогового окна и перезапись DialogFragment.onCreateDialog
и использование AlertDialog.Builder
, чтобы упростить запись поведения кнопок.
Документация Android о диалогах передача событий обратно в диалоговый хост заключается в том, что хост всегда является Activity
и никогда не Fragment
. Я попытался обобщить поведение, чтобы использовать его в моем случае, но я не могу.
Я попытался использовать обратный вызов DialogFragment.onAttach
, чтобы получить ссылку Activity
и использовать интерфейс между Fragment
и DialogFrament
, и он отлично работает, но я не могу получить Fragment
из Activity
чтобы он работал.
Может кто-нибудь помочь с кратким примером?
Заранее спасибо
Вы можете использовать setTargetFragment
и getTargetFragment
методов Fragment
. Вы можете установить Fragment
в качестве цели DialogFragment
, а затем получить ссылку на него из DialogFragment
.
вы можете использовать обратные вызовы. просто выполните кнопку "done" или что-то подобное в вашем диалоговом фрагменте.
поэтому в вашем диалоговом фрагменте сделайте что-то вроде этого:
protected OnDialogClickedListener callback = null;
public interface OnDialogClickedListener {
public abstract void onDialogClicked(int position);
}
public void setOnDialogClickedListener(OnDialogClickedListener l){
callback = l;
}
button.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
callback.onDialogClicked(position);
dismiss();
}
});
в вашей деятельности сделайте что-то вроде этого:
final YourFragment f = YourFragment .newInstance(0);
f.show(ft, "YourFragment ");
f.setOnDialogClickedListener(new OnDialogClickedListener() {
@Override
public void onDialogClicked(int position) {
updateText(position);
f.dismiss();
}
});