Как я могу передать данные между фрагментом и его контейнерной активностью? Есть ли что-то похожее на передачу данных между действиями через намерения?
Я читал это, но это не сильно помогло:
http://developer.android.com/guide/topics/fundamentals/fragments.html#CommunicatingWithActivity
Ответы:
В ваш фрагмент вы можете позвонить
getActivity()
.Это даст вам доступ к деятельности, которая создала фрагмент. Оттуда вы можете явно вызывать любые методы доступа, которые есть в действии.
например, для метода, вызываемого
getResult()
в вашей Деятельности:источник
Попробуйте использовать интерфейсы.
Любой фрагмент, который должен передавать данные обратно в содержащую его деятельность, должен объявлять интерфейс для обработки и передачи данных. Затем убедитесь, что ваша содержащая деятельность реализует эти интерфейсы. Например:
ЯВА
В вашем фрагменте объявите интерфейс ...
Затем подключите реализацию интерфейса содержащего класса к фрагменту в методе onAttach, например, так:
Внутри вашего фрагмента, когда вам нужно обработать передачу данных, просто вызовите его для объекта dataPasser:
Наконец, в вашей сдерживающей деятельности, которая реализует
OnDataPass
...Котлин
Шаг 1. Создать интерфейс
Шаг 2. Затем подключите реализацию интерфейса содержащего класса к фрагменту в методе onAttach (YourFragment) следующим образом:
Шаг 3. В вашем фрагменте, когда вам нужно обработать передачу данных, просто вызовите его для объекта dataPasser:
Шаг 4. Наконец, в вашей деятельности реализуется OnDataPass
источник
ActionBar.TabListener
и должен был добавить дополнительный интерфейс.Самый простой подход, но не рекомендуется
Вы можете получить доступ к данным активности из фрагмента:
Деятельность:
Фрагмент:
источник
MyActivity
источник
Передача данных между фрагментом и его контейнерной активностью
Деятельность:
Фрагмент:
Чтение значения во фрагменте
источник
Я не знаю, является ли это наилучшим способом или нет. Я долго искал в Google, чтобы найти, как я могу передать Bundle из фрагмента в его контейнерную активность, но все, что я нашел, это вместо этого отправлять данные из действия во фрагмент (что немного смутило меня, так как я новичок).
позже я попробовал что-то свое, что у меня получилось так, как я хотел. поэтому я опубликую это здесь, если кто-то вроде меня ищет то же самое.
// Передача данных из фрагмента.
// Получение данных из пакета по активности контейнера.
источник
Интерфейс является одним из лучших решений:
Клей интерфейс:
MyActivity:
MyFragment:
источник
Я использовал AppCompatActivity, который реализует прослушиватели даты. Фрагменты стали необходимостью, поскольку мне нужно было кодировать селектор диапазона дат. И мне также был нужен контейнер для получения выбранных дат, чтобы вернуть их в родительское действие.
Для действия контейнера это объявление класса:
И интерфейсы для обратных вызовов:
Обратные вызовы являются строками, потому что даты являются параметрами в выборе запроса.
Код для фрагментов (на основе исходного фрагмента даты):
}
Чтобы создать контейнер + фрагменты, я использовал ViewPager (AppCompat) с пользовательским классом, который расширяет FragmentPagerAdapter. Нет диалогов.
источник
Просто вы можете использовать EventBus, это легко и отлично работает
EventBus в 3 шага
Определите события:
public static class MessageEvent { /* Additional fields if needed */ }
Подготовьте подписчиков: объявите и аннотируйте свой метод подписки, при желании укажите режим потока:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {/* Do something */};
Зарегистрируйте и отмените регистрацию вашего подписчика. Например, в Android действия и фрагменты обычно должны регистрироваться в соответствии с их жизненным циклом:
Опубликовать события:
EventBus.getDefault().post(new MessageEvent());
источник
Я знаю, что это может быть поздно. Но я также всегда терялся в этом вопросе. Я делюсь этой ссылкой ... потому что это, возможно, лучшее объяснение, которое я когда-либо нашел в Интернете для этого. Это решает фрагмент к деятельности и фрагмент к фрагменту !
Решено и объяснено очень хорошо
источник
Это работает для меня ..
в Activity добавьте этот метод
и во фрагмент добавьте эту строку
источник
источник
Другой простой способ получить данные, переданные из другого действия, во фрагменте в операции контейнера: например:
В вашем Activity_A вы создаете намерение, как будто вы отправляете данные (строка здесь) в другое действие:
в вашем фрагменте, содержащемся в вашем Activity_B:
источник
getBaseContext()
выдает мне следующую ошибку:The method getBaseContext() is undefined for the type new View.OnClickListener(){}