0

У меня есть ViewPager в моей деятельности, которая содержит несколько фрагментов для каждой страницы. Теперь, как только фрагмент загружен, я вызываю службу, задача которой - извлекать данные из веб-служб и доставлять результат конкретный фрагмент с классом ResultReceiver. Чтобы быть более ясным:Доставить результат от одного обслуживания до нескольких фрагментов

FragmentA----->calls FetchDataService() 

FragmentB----->calls FetchDataService() 

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

+0

Использование локального широковещательного приемника в виде фрагментов, возможно, это работает. – bGorle

+0

Как часто FetchDataService нужно извлекать данные - другими словами, регулярно ли изменяются данные в конце веб-службы? Также делайте FragmentA, FragmentB и т. Д., Попросите FetchDataService получить одни и те же данные или каждый фрагмент хочет получить разные данные? – Squonk

+0

Каждый фрагмент хочет получить разные данные, данные извлекаются один раз и хранятся в базе данных SQLite. Если данные в конце webservice меняются, он снова извлекает свежий контент @Squonk – Pankaj

ответ

2

Не допускайте опроса фрагментов данных, позволяйте им слушать трансляции. Служба FetchDataService должна будет отправить широковещательную рассылку с данными, когда она получила ее с сервера. Каждый фрагмент может не регистрировать широковещательный приемник с правильной установкой намерения для прослушивания трансляций FetchDataService.

// Example function to send data with a broadcast 
sendData(Context context, Data data) { 
    Intent intent = new Intent(); 
    intent.setAction("fetchedData"); 
    intent.putExtra("data", data); 
    context.sendBroadcast(intent); 
} 

// Register your reciever to listen to the correct actions (in this case "fetchedData") 
BroadcastReceiver broadcastReceiver = new MyBroadcastReceiver(); 
IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction("fetchedData") // use same string here as in sender 
context.registerReceiver(broadcastReceiver, intentFilter); 

// You can create multiple receivers (one for each fragment for example) 
public class MyBroadcastReceiver extends android.content.BroadcastReceiver { 
    public void onReceive(Context context, Intent intent) { 
     if (action.equals("fetchedData")) { 
      Data data = (Data)intent.getSerializableExtra("data"); 
      // Do something with data 
     } 
    } 
} 

Я бы сделал константы из строк «fetchedData» и «data», чтобы предотвратить опечатки.

 Смежные вопросы

  • Нет связанных вопросов^_^