Фрагмент при передаче данных фрагмента - PullRequest
0 голосов
/ 28 октября 2018

У меня есть фрагмент, в котором есть 2 фрагмента.Во внешнем фрагменте есть кнопки «Вперед» и «Назад», по которым я меняю фрагменты.Это похоже на

Это то, что кажется

Я хочу передавать данные между этими фрагментами и пока не смог достичь этого.Для меня не очевидно переносить данные из внутреннего фрагмента во внешний.Кроме того, у меня есть карты в одном из этих фрагментов, и карта работает асинхронно.

1 Ответ

0 голосов
/ 29 октября 2018

Чтобы получить ссылку на родительский / внешний фрагмент, вы должны использовать getParentFragment API.

Шаг 1: В первом внутреннем фрагменте объявите новый передаваемый интерфейсданные из этого фрагмента во внешний фрагмент.

public class Inner1Fragment extends Fragment {

    // Call this method when you want to pass data to outer fragment (such as users press on a button on this fragment)
    private void onButtonClick() {
        // Pass the message to OuterFragment.
        OnMessageListener listener = (OnMessageListener) getParentFragment();
        listener.onMessage("Message from Inner1Fragment");
    }

    // Declare an interface to pass data to outer fragment.
    public interface OnMessageListener {
        void onMessage(String message);
    }
}

Шаг 2: Пусть внешний фрагмент реализует OnMessageListener и записывает код для пересылки сообщения во второй внутренний фрагмент.

public class OuterFragment extends Fragment implements Inner1Fragment.OnMessageListener {

    @Override
    public void onMessage(String message) {
        // Forward the message to Inner2Fragment
        Inner2Fragment fragment = (Inner2Fragment) getChildFragmentManager().findFragmentByTag("Inner2Fragment");
        if (fragment != null) {
            fragment.onReceiveMessage(message);
        }
    }
}

Шаг 3: Во втором внутреннем фрагменте напишите код для обработки полученного сообщения (я показываю сообщение с помощью Toast API).

public class Inner2Fragment extends Fragment {

    public void onReceiveMessage(String message) {
        Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show();
    }
}
...