Monday, September 19, 2011

[android-developers] FragmentStatePagerAdapter getItem only called for starting orientation, which in turn keeps some fragments between orientation change (not recreates them)

My source is below, but I was hoping that the Fragements getItem would
be called after an orientation change on all page items, so that I can
re-populate my fragment tracking code seen below in the adapter but it
seems that somehow in the background the framents are saved between
orientations and reused, which means my current method to determine
and keep track of the fragments in the adapter wouldn't work. I don't
want to call getItem myself, because that will just create a new
fragement, i want the fragment that is already created @ pos 0.

To be specific, mFragments[TestSortType.COUNT] is re-created to all
null between orientation changes, but I can't repopulate the fragments
because FragmentStatePagerAdapter isn't calling getItem for those
fragments already create after an orientation change.


public class TestsPagerAdapter extends FragmentStatePagerAdapter
implements OnPageChangeListener {

private static final String TAG = TestsPagerAdapter.class.getName();

private TestsFragment[] mFragments = new
TestsFragment[TestSortType.COUNT];
private int mCurrentPosition = POSITION_NONE;

public TestsPagerAdapter(FragmentManager fm) {
super(fm);
}

@Override
public Fragment getItem(int position) {
TestsFragment frag =
TestsFragment.create(TestSortType.getSortTypeFromPosition(position));
mFragments[position] = frag;
if(mCurrentPosition == POSITION_NONE) mCurrentPosition = position;
return frag;
}

@Override
public int getCount() {
return TestSortType.COUNT;
}

public TestsFragment getCurrentFragment()
{
TestsFragment frag = null;
try
{
if(mCurrentPosition >= 0 &&
mCurrentPosition < mFragments.length)
frag = mFragments[mCurrentPosition];
}
catch (Exception ex)
{
Log.e(TAG, "getCurrentFragment " + ex.getMessage());
}
return frag;
}

public TestsFragment[] getFragments()
{
return mFragments;
}

@Override
public void onPageScrollStateChanged(int state) {

}

@Override
public void onPageScrolled(int position, float positionOffset, int
positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {
mCurrentPosition = position;
}
}

--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

No comments:

Post a Comment