Note that there are some explanatory texts on larger screens.

plurals
  1. POUpdate data in ListFragment as part of ViewPager
    primarykey
    data
    text
    <p>I'm using the v4 compatibility ViewPager in Android. My FragmentActivity has a bunch of data which is to be displayed in different ways on different pages in my ViewPager. So far I just have 3 instances of the same ListFragment, but in the future I will have 3 instances of different ListFragments. The ViewPager is on a vertical phone screen, the lists are not side-by-side.</p> <p>Now a button on the ListFragment starts an separate full-page activity (via the FragmentActivity), which returns and FragmentActivity modifies the data, saves it, then attempts to update all views in its ViewPager. It is here, where I am stuck.</p> <pre><code>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; } ... </code></pre> <p>Now as you can see, my first attempt was to notifyDataSetChanged on the entire FragmentPagerAdapter, and this showed to update the data sometimes, but others I got an IllegalStateException: Can not perform this action after onSaveInstanceState. </p> <p>My second attempt involed trying to call an update function in my ListFragment, but getId in getItem returned 0. As per the docs I tried by </p> <blockquote> <p>acquiring a reference to the Fragment from FragmentManager, using findFragmentById() or findFragmentByTag()</p> </blockquote> <p>but I don't know the tag or id of my Fragments! I have an android:id="@+id/viewpager" for ViewPager, and a android:id="@android:id/list" for my ListView in the ListFragment layout, but I don't think these are useful.</p> <p>So, how can I either: a) update the entire ViewPager safely in one go (ideally returning the user to the page he was on before) - it is ok that the user see the view change. Or preferably, b) call a function in each affected ListFragment to update the ListView manually.</p> <p>Any help would be gratefully accepted!</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload