Ответ 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()
, чтобы текст был отправлен, когда вам это нужно.