Решение 1: Использование обратных вызовов
// это будет работать, если ваш экземпляр фрагмента активен, поэтому проверьте ограничение экрана для viewpager
(Выможет также использовать решение 3, упомянутое Фаридом Хаком, которое делает то же самое, выполняя работу самого действия)
Здесь Activity реализует обратный вызов OnDataUpdateListener
interface OnDataUpdateListener{
void passDataToFragmentB(String data)
}
Код активности:
Fragment instanceFragmentB;
// intialise it somewhere in your activity
// or get from viewpager adapter
@Override
void passDataToFragmentB(String data){
instanceFragmentB.onDataChange(data)
}
Код фрагмента A:
OnDataUpdateListener mOnDataUpdateListener;
onAttach(Activity activity){
mOnDataUpdateListener= (OnDataUpdateListener) activity
}
onViewCreated(){
somebutton.onClick{
mOnDataUpdateListener.passDataToFragmentB("someString")
}
}
Код фрагмента B:
onDataChange(String data){
//do your work with update data passed from fragment A
}
Решение 2: Использование EventBus или RxBus
// это будет работать, если ваш экземпляр фрагмента активен, поэтому проверьте ограничение offscreenpage viewpager
Используя событие или rxbus, опубликуйте новое обновленное значение на шине и сделайте целевой фрагмент, наблюдающий тот же тип значения.
Фрагмент A:
onViewCreated(){
somebutton.onClick{
EventBus.post("your data")
}
}
Фрагмент B:
@Subsribe
void onDataChange(String data){
//do your work with update data passed from fragment A
}
Решение 3: Использование ViewModel.
Взять модель представления с контекстомактивности во всем фрагменте и Wrap String с LiveData.
Всякий раз, когдаданные изменяются, просто публикуйте новые данные в объекте String Livedata.Все фрагменты, которые наблюдают за тем, что liveata получат обновленное значение.