TabPageIndicator: не удается обновить представление фрагмента, имеющего ListView, после получения ответа от AsyncTask
Я использую TabPageIndicator
(Библиотека здесь). У меня 2 вкладки. Оба показывают один и тот же лабораторный результат по-разному. Одна вкладка группирует результат по дате, а другие группы вкладок по имени соска.
Моя цель - сделать только один вызов на сервере и использовать сгенерированный POJO в обоих фрагментах ViewPager. Я создал кастом FragmentPagerAdapter
в котором я инициализирую фрагменты в getItem()
следующим образом:
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
switch(position){
case 0:
if(labsByDateFragment == null){
labsByDateFragment = new LabsByDateFragment();
fragment = labsByDateFragment;
}
break;
case 1:
if(labsByTestFragment == null){
labsByTestFragment = new LabsByTestFragment();
fragment = labsByTestFragment;
}
break;
}
return fragment;
}
И то и другое LabsByDateFragment
& LabsByTestFragment
продолжается Fragment
и имеют ListView
, Сейчас изначально когда мой FragmentActivity
запускает, он покажет как пустой фрагмент, так и вызывающий AsyncTask
сделать вызов веб-службы для данных.
Как только данные получены от AsyncTask, я звоню notifyDataSetChanged(labResponse)
в OnCompleteListner
следующим образом:
private OnCompleteListner onCompleteListner = new OnCompleteListner() {
@Override
public void onSuccess(Object obj) {
LabsResponse labResponse = (LabsResponse) obj;
adapter.notifyDataSetChanged(labResponse);
}
@Override
public void onFailure(String message) {
AlertDialog dialog = (AlertDialog) DialogFactory
.getDialogWithOkButton(
"Oops..Failed to get your Results...Sorry..",
ResultsLauncher.this);
dialog.setOwnerActivity(ResultsLauncher.this);
dialog.show();
}
};
public void notifyDataSetChanged(LabsResponse labsResponse){
labsByDateFragment.setLabsResponse(labsResponse);
labsByTestFragment.setLabsResponse(labsResponse);
}
setLabsResponse в обоих фрагментах просто получить список лабораторий, сгруппированных соответственно (по дате или по имени) и инициализировать мой пользовательский ListView Adapter
, И связать адаптер с ListView.
Моя проблема в том, что я получаю ListView Отображается только в 1-м фрагменте. Но 2-й фрагмент остается пустым. Также ListView 1-го Фрагмента (с LabsByDateFragment) показывает данные, сгруппированные по названию теста Lab. Но если я поменяю порядок звонков setLabsResponse
в notifyDataSetChanged
как следует, он покажет мне результаты, сгруппированные по дате:
public void notifyDataSetChanged(LabsResponse labsResponse){
labsByTestFragment.setLabsResponse(labsResponse);
labsByDateFragment.setLabsResponse(labsResponse);
}
Таким образом, он показывает данные в соответствии с последним сгруппированным ответом лаборатории. Не знаю, где я делаю ошибку.
1 ответ
У меня была похожая проблема, потому что есть несколько запущенных экземпляров класса Activity.
Чтобы разрешить только один экземпляр Activity, мы должны добавить android:launchMode="singleTask" нашей Activity в AndroidManifest.xml
Пример:
<activity android:name="myActivity" android:launchMode="singleTask">