После этого вопроса:Фрагменты Update ViewPager из другого класса:
How to recreate all fragments in ViewPager:
У меня есть эти классы:
public class ViewPagerAdapter extends FragmentPagerAdapter
{
private List<Fragment> fragments;
/**
* @param fm
* @param fragments
*/
public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
/* (non-Javadoc)
* @see android.support.v4.app.FragmentPagerAdapter#getItem(int)
*/
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
/* (non-Javadoc)
* @see android.support.v4.view.PagerAdapter#getCount()
*/
@Override
public int getCount() {
return this.fragments.size();
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
и FragmentActivity
:
public class TabsViewPagerFragmentActivity extends FragmentActivity implements
ViewPager.OnPageChangeListener, TabHost.OnTabChangeListener
{
static final String TAG = TabsViewPagerFragmentActivity.class.getSimpleName();
private TabHost mTabHost;
private ViewPager mViewPager;
private HashMap<String, TabInfo> mapTabInfo = new HashMap<String, TabsViewPagerFragmentActivity.TabInfo>();
public ViewPagerAdapter mPagerAdapter;
.....
Сейчас в этом FragmentActivity
У меня есть этот слушатель:
private class SlicerSelectedOnClickListener implements OnClickListener
{
private ODSharedSlicer slicer;
private int slicerIndex;
public SlicerSelectedOnClickListener(ODSharedSlicer slicer, int slicerIntex)
{
super();
this.slicer = slicer;
this.slicerIndex = slicerIntex;
}
public void onClick(View v)
{
slicerOnClickConfiguration(slicerIndex, v);
mPagerAdapter.notifyDataSetChanged();
}
}
....
И это прекрасно работает notifyDataSetChanged()
становится называются и осколки ViewPager в становятся воссозданы, как я хочу.
Проблема: Когда я пытаюсь вызвать метод notifyDataSetChanged()
адаптера из другого класса (в моем случае это класс, который отвечает за синтаксический анализ данных, полученных от сервера) фрагменты остаются неизменными.
Я пытался сделать это: Я создал эти методы в моем FragmentActivity
классе (один с ViewPager
):
public void NotifyTabActivityViewPagerAdapter()
{
mPagerAdapter.notifyDataSetChanged();
}
public ViewPagerAdapter getTabActivityViewPagerAdapter()
{
return mPagerAdapter;
}
public ViewPager getTabActivityViewPager()
{
return mViewPager;
}
И попытался следующие из второго класса:
((TabsViewPagerFragmentActivity)currentActivity).NotifyTabActivityViewPagerAdapter();
Or :
((TabsViewPagerFragmentActivity)currentActivity).getTabActivityViewPager().setAdapter(((TabsViewPagerFragmentActivity)currentActivity).getTabActivityViewPagerAdapter());
Но это не работает. Как ни странно, когда я запускаю это:
((TabsViewPagerFragmentActivity)currentActivity).getTabActivityViewPager().setAdapter(null);
фрагменты действительно удаляются, но я не могу воссоздать новый набор фрагментов с новыми данными, полученными от стороны сервера.
Что мне здесь не хватает? Как мне воссоздать весь фрагмент в этом FragmentActivity
из другого класса?
Любая помощь будет оценена по достоинству.
Фактически этот второй класс является вспомогательным классом и не распространяется на фрагмент или активность. И здесь есть только один вопрос: «Как мне воссоздать весь фрагмент в этой группе FragmentActivity из другого класса?» поток выглядит следующим образом: у меня есть пользовательский вид в моем FragmentActivity, пользовательский вид всплывает, выбирая опцию из этого всплывающего окна, запускает AsyncTask, который получает данные с сервера. Затем у меня есть вспомогательный класс (простой класс) который анализирует эти данные, и когда он заканчивается, я хотел бы запустить .notifyDataSetChanged(); из этого класса или каким-то другим способом, как это было у слушателя. –
Хорошо, я этого не понимал раньше. Если вы класс, просто реализуете 'AsyncTack', почему вы не можете просто настроить обратный вызов между этим классом и его методом' onPostExecute'? – Rarw
Потому что в onPostExecute я вызываю метод «ResponseHandler.ParseRecievedData (String data)», где «ResponseHandler» - это простой класс java, в котором хранятся все мои методы, связанные с веб-запросами AsyncTask. Я хочу сохранить это разделение. но я не могу раскрыть, как вызвать NotifyDataSetChanged() из класса ResponseHandler. Нужно ли что-то делать с контекстом Activity/Application? –