I am using a viewpager to display images. I just need three fragments basically: the previous image for preview, the current image displayed and the next image for preview. I would just like to display a preview of the previous and next images, it will change to the full image when the user actually holds it. So I decided to use only 3 fragments for this. Code below:
private class ImagePagerAdapter extends FragmentStatePagerAdapter implements ViewPager.OnPageChangeListener { private ImageFragment mImageFragment; private ImagePreviewFragment mPreviousPreviewFragment; private ImagePreviewFragment mNextPreviewFragment; public ImagePagerAdapter(FragmentManager fm, ImageFragment image, ImagePreviewFragment previous, ImagePreviewFragment next) { super(fm); mImageFragment = image; mPreviousPreviewFragment = previous; mNextPreviewFragment = next; } @Override public Fragment getItem(int position) { if (position == mPager.getCurrentItem()) { mImageFragment.display(position); return mImageFragment; } if (position < mPager.getCurrentItem()) { mPreviousPreviewFragment.display(position - 1); return mPreviousPreviewFragment; } mNextPreviewFragment.display(position + 1); return mNextPreviewFragment; } @Override public int getCount() { return 100; } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { Log.d(TAG, "onPageScrolled"); } @Override public void onPageSelected(final int position) { Log.d(TAG, "onPageSelected " + position); new Handler().postDelayed(new Runnable() { @Override public void run() { notifyDataSetChanged(); } }, 500); } @Override public void onPageScrollStateChanged(int state) { Log.d(TAG, "onPageScrollStateChanged " + state); } @Override public int getItemPosition(Object item) { return POSITION_NONE;
So I pre-created three fragments to display the previous / next preview and current image and return them for getItem (). I also notifydatasetchange () in onpageselected () to do all three positions to refresh the fragment when the user has moved to a new page.
But the problem is that he will throw
Fragment already added IllegalStateException
when fragments are added a second time. I think because it has been added before. I can create a new fragment every time, but I consider it wasteful. So, how can I reuse an already created fragment and just update them?
Thanks Simon
source share