Используйте EventBus. Это действительно легко и приятно.
1 - Создать событие:
public class SendDataToFragmentEvent{
private YourDataType yourData;
public SendDataToFragmentEvent(YourDataType yourData){
this.yourData = yourData;
}
public void getYourData(){return yourData;}
}
А чем в вашей деятельности, в тот момент, когда вы хотите отправить данные во фрагмент:
EventBus.getDefault.post(new SendDataToFragmentEvent(yourDataHere));
И чем вы должны ждать этих данных во фрагменте:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onSendDataToFragmentEvent(SendDataToFragmentEventevent
event) {
/* Do something with your data here*/
};
Не забывайте, что EventBus должен знать, когда начинать слушать или останавливать:
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
Это потому, что Eventbus остается здесь навсегда, пока ваш фрагмент / активность не будет уничтожена.
Примечание: фрагмент должен быть открыт для прослушивания активности вашего события.
Здесь - это ссылка на эту библиотеку, я нашел ее действительно хорошей.