Я використовую ViewPager сумісності v4 в Android. Моя FragmentActivity має купу даних, які мають відображатися по-різному на різних сторінках мого ViewPager. Поки що у мене є лише 3 екземпляри одного ListFragment, але в майбутньому я матиму 3 екземпляри різних ListFragment. ViewPager знаходиться на вертикальному екрані телефону, списки не є сторонніми.
Тепер кнопка на ListFragment запускає окрему діяльність на повній сторінці (через FragmentActivity), яка повертається, і FragmentActivity модифікує дані, зберігає їх, а потім намагається оновити всі перегляди у своєму ViewPager. Саме тут, де я застряг.
public class ProgressMainActivity extends FragmentActivity
{
MyAdapter mAdapter;
ViewPager mPager;
@Override
public void onCreate(Bundle savedInstanceState)
{
...
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.viewpager);
mPager.setAdapter(mAdapter);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
...
updateFragments();
...
}
public void updateFragments()
{
//Attempt 1:
//mAdapter.notifyDataSetChanged();
//mPager.setAdapter(mAdapter);
//Attempt 2:
//HomeListFragment fragment = (HomeListFragment) getSupportFragmentManager().findFragmentById(mAdapter.fragId[0]);
//fragment.updateDisplay();
}
public static class MyAdapter extends FragmentPagerAdapter implements
TitleProvider
{
int[] fragId = {0,0,0,0,0};
public MyAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public String getTitle(int position){
return titles[position];
}
@Override
public int getCount(){
return titles.length;
}
@Override
public Fragment getItem(int position)
{
Fragment frag = HomeListFragment.newInstance(position);
//Attempt 2:
//fragId[position] = frag.getId();
return frag;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE; //To make notifyDataSetChanged() do something
}
}
public class HomeListFragment extends ListFragment
{
...
public static HomeListFragment newInstance(int num)
{
HomeListFragment f = new HomeListFragment();
...
return f;
}
...
Тепер, як ви бачите, моєю першою спробою було сповіститиDataSetChanged на весь FragmentPagerAdapter, і це показало, що іноді оновлюють дані, але інші я отримав IllegalStateException: Не можу виконати цю дію після onSaveInstanceState.
Моя друга спроба викликала спробу викликати функцію оновлення в моєму ListFragment, але getId в getItem повернувся 0. Відповідно до документів, які я намагався
отримання посилання на фрагмент від FragmentManager, використовуючи findFragmentById () або findFragmentByTag ()
але я не знаю тег чи ідентифікатор моїх фрагментів! У мене є андроїд: id = "@ + id / viewpager" для ViewPager, і android: id = "@ android: id / list" для мого ListView у макеті ListFragment, але я не думаю, що вони корисні.
Отже, як я можу: a) безпечно оновити весь ViewPager за один раз (в ідеалі повернути користувача на сторінку, на якій він був раніше) - це нормально, що користувач бачить зміни подання. Або бажано, б) викликайте функцію у кожному з впливаючих ListFragment для оновлення ListView вручну.
Будь-яка допомога буде вдячно прийнята!
null
за фрагмент.