Отправка данных во фрагменты после их загрузки с помощью Async Http

Я разбираю JSON с Async Http в деятельности. Однажды, когда данные успешно проанализированы, я хочу, чтобы они были доступны обоим фрагментам, которые содержит действие. Один фрагмент ListView отображение загруженных данных, а другой Google MapView отображение данных - не то, чтобы это имело значение.

Как только данные загружены:

@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
    // Data downloaded
}

Я хочу отправить его обоим fragments и обновить карту и ListView с данными.

Так что я как-то хочу реализовать своего рода слушателя в обоих этих фрагментах, которые будут слушать "onSuccess" произойти, а затем использовать данные, которые он получил.

Так что если onSuccess произошло раньше Fragments даже созданные экземпляры, они будут мгновенно отображать данные. Если нет, они будут ждать этого.

Может ли кто-нибудь помочь мне реализовать это? Я не знаю, как именно к этому подойти.

4 ответа

Решение

У вас есть эти варианты:

  • Используйте EventBus и отправьте данные обоим фрагментам
  • Сохраните данные в действии, используйте LocalBroadcasrManager и отправьте широковещательную рассылку, которая позволит фрагментам знать, что данные были загружены, и получать доступ к данным из фрагментов, т.е. ((MyActivity)getActivity()).getData();

Локальная трансляция сообщения будет соответствовать этому сценарию.

Следующие пункты также будут полезны для вас.

  1. создавать экземпляры фрагментов после получения данных и передавать их через метод setArgument(Bundle) (если выборка ответа выполняется один раз)
  2. Если данные в onSucces() поступают периодически, то реализуйте свой собственный метод для обновления пользовательского интерфейса как фрагмента, так и вызовите реализованный метод из метода Activity.onSuccess(...).

Простое использование с EventBus.

Зависимость: https://github.com/greenrobot/EventBus

      implementation("org.greenrobot:eventbus:3.3.1")

<dependency>
    <groupId>org.greenrobot</groupId>
    <artifactId>eventbus-java</artifactId>
    <version>3.3.1</version>
</dependency>

Используйте это как: Начать

      public class MessageEvent {

   public final String message;

   public MessageEvent(String message) {
      this.message = message;
   }
}

Подпишитесь на Data где угодно:

      @Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
   Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
}

Слушайте с:

      EventBus.getDefault().register(this);

Вы можете использовать Handler для этого...... вы можете поместить все свои данные в связку и отправить их обработчику, объявить этот обработчик в своем фрагменте и передать этот обработчик в свой асинхронный класс,,,, когда вы получите ответ просто sendMessage к этому обработчику.......

 Message msg =  new Message();
 Bundle bundle = new Bundle();

   bundle.putString("Test", "test value");
 msg.setData(bundle);

  handler.sendMessage(msg);


//Handler in The UI Thread Retreieves The Data
//And Can Update the GUI as Required

 private Handler handler = new Handler() {
  @Override
  public void handleMessage(Message msg) {

Bundle bundle = msg.getData();

//set data to your views here.........

}

};

Надеюсь, поможет..

укротитель

Другие вопросы по тегам