Представьте, у меня есть FragmentA, из которого я запускаю DialogFragment (в поле есть EditText
). Как мне вернуть значение из EditText
в FragmentA? Я пытаюсь сделать что-то вроде this и this, но мне не удалось.
Как получить данные из DialogFragment в фрагмент?
Ответ 1
Метод Fragment.onActivityResult()
полезен в этой ситуации. Требуется getTargetRequestCode()
, который представляет собой код, который вы устанавливаете между фрагментами, чтобы их можно было идентифицировать. Кроме того, он принимает код запроса, обычно просто 0
, если код работает хорошо, а затем Intent
, который вы также можете присоединить к строке
Intent intent = new Intent();
intent.putExtra("STRING_RESULT", str);
Кроме того, setTargetFragment(Fragment, requestCode)
должен использоваться в фрагменте, который отправляется с целью его идентификации. В целом, у вас будет код в запрашивающем фрагменте, который выглядит следующим образом:
FragmentManager fm = getActivity().getSupportFragmentManager();
DialogFragment dialogFragment = new DialogFragment();
dialogFragment.setTargetFragment(this, REQUEST_CODE);
dialogFragment.show();
Класс для отправки данных (DialogFragment) будет использовать этот фрагмент, который мы только что определили, чтобы отправить данные:
private void sendResult(int REQUEST_CODE) {
Intent intent = new Intent();
intent.putStringExtra(EDIT_TEXT_BUNDLE_KEY, editTextString);
getTargetFragment().onActivityResult(
getTargetRequestCode(), REQUEST_CODE, intent);
}
Чтобы получить данные, мы используем этот тип класса в Фрагменте, который изначально запустил DialogFragment:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Make sure fragment codes match up
if (requestCode == DialogFragment.REQUEST_CODE) {
String editTextString = data.getStringExtra(
DialogFragment.EDIT_TEXT_BUNDLE_KEY);
В этот момент у вас есть строка из EditText
из DialogFragment
в родительском фрагменте. Просто используйте метод sendResult(int)
в вашем анонимном классе TextChangeListener()
, чтобы текст был отправлен, когда вам это нужно.
Ответ 2
Вам необходимо отправить данные из диалога обратно в действие с помощью метода обратного вызова, а затем вернуть данные обратно к фрагменту, к которому вы хотите перейти. Просто быстрый пример:
public void datFromDialog(String data){
MyFragment mf = (MyFragment)getFragmentManager().findFragmentById(r.id.frag);
mf.iWantNewData(data);
}
Ответ 3
Что вы хотите, в соответствии с Android-разработчиками...