Обновление ListFragment на основе результата асинхронной задачи

Сценарий: у меня есть фрагмент списка, который отображает список друзей. Когда элемент списка нажат, я показываю сведения о друге во фрагменте диалога.

Проблема: во фрагменте диалога у меня есть возможность удалить друга из моего списка друзей (на удаленном сервере). Я использую асинхронный подход для этого. После возвращения из фрагмента диалога, как мне обновить «старый» список друзей. Как вызвать "перезагрузку" фрагмента. Поскольку асинхронная задача не знает о том, что пользовательский адаптер списка используется во фрагменте списка.

Извините, я добавлю код как можно скорее. Если кто-то встречал этот сценарий раньше, любезно предоставьте свои предложения.

Изменить: после успешного удаления друга из списка друзей на удаленном сервере я хочу перезагрузить список, отображаемый во фрагменте списка. Есть ли способ вызвать уведомление dataSetChanged в самом фрагменте списка.


person Community    schedule 04.01.2013    source источник
comment
Одним из лучших и эффективных решений является использование интерфейса, реализованного в ListFragment, и создание в DialogFragment. вы можете обрабатывать Listfragment Friend List Add/update/Delete.   -  person Dixit Patel    schedule 04.01.2013


Ответы (2)


Без проблем. Я предполагаю, что ListFragment читает из какого-то источника данных — будь то ArrayAdapter или SimpleCursorAdapter (или что-то подобное) — и ваша задача также модифицирует этот источник. Когда AsyncTask завершится, вы сможете просто получить этот фрагмент и обновить базовые данные. Например:

// ...
void onPostExecute(Void result) {
    ListFragment lFrag = (ListFragment) getFragmentManager().findFragmentById(R.id.yourListFragment);
    BaseAdapter adapter = (BaseAdapter) lFrag.getListAdapter();
    adapter.notifyDataSetChanged();
}
person Oleg Vaskevich    schedule 04.01.2013
comment
Спасибо, попробую ваше решение. - person ; 04.01.2013
comment
Как вы можете вызвать getFragmentManager() из класса AsyncTask??! - person EsmaeelQash; 31.01.2014
comment
На данный момент я не помню, но у вас может быть WeakReference в FragmentActivity, что позволит вам вызвать getFragmentManager(). - person Oleg Vaskevich; 01.02.2014

Таким образом, вы будете заполнять ListView с помощью ArrayList.

  • Удалите элемент из ArrayList с индексом = ListViewItemIndex.
  • вызовите notifyDataSetChanged на адаптере, который вы используете.
person Archie.bpgc    schedule 04.01.2013