aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java')
-rw-r--r--main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java30
1 files changed, 16 insertions, 14 deletions
diff --git a/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java b/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java
index 366a59d..952726e 100644
--- a/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java
+++ b/main/src/cgeo/geocaching/activity/AbstractViewPagerActivity.java
@@ -14,6 +14,7 @@ import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
+import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.HashMap;
@@ -29,10 +30,6 @@ import java.util.Map;
*/
public abstract class AbstractViewPagerActivity<Page extends Enum<Page>> extends AbstractActivity {
- protected AbstractViewPagerActivity(String helpTopic) {
- super(helpTopic);
- }
-
/**
* A {@link List} of all available pages.
*
@@ -95,12 +92,12 @@ public abstract class AbstractViewPagerActivity<Page extends Enum<Page>> extends
private class ViewPagerAdapter extends PagerAdapter implements TitleProvider {
@Override
- public void destroyItem(View container, int position, Object object) {
- ((ViewPager) container).removeView((View) object);
+ public void destroyItem(ViewGroup container, int position, Object object) {
+ container.removeView((View) object);
}
@Override
- public void finishUpdate(View container) {
+ public void finishUpdate(ViewGroup container) {
}
@Override
@@ -109,7 +106,7 @@ public abstract class AbstractViewPagerActivity<Page extends Enum<Page>> extends
}
@Override
- public Object instantiateItem(View container, int position) {
+ public Object instantiateItem(ViewGroup container, int position) {
final Page page = pageOrder.get(position);
PageViewCreator creator = viewCreators.get(page);
@@ -126,7 +123,7 @@ public abstract class AbstractViewPagerActivity<Page extends Enum<Page>> extends
// Result from getView() is maybe cached, but it should be valid because the
// creator should be informed about data-changes with notifyDataSetChanged()
view = creator.getView();
- ((ViewPager) container).addView(view, 0);
+ container.addView(view, 0);
}
} catch (Exception e) {
Log.e("ViewPagerAdapter.instantiateItem ", e);
@@ -150,7 +147,7 @@ public abstract class AbstractViewPagerActivity<Page extends Enum<Page>> extends
}
@Override
- public void startUpdate(View arg0) {
+ public void startUpdate(ViewGroup arg0) {
}
@Override
@@ -211,6 +208,7 @@ public abstract class AbstractViewPagerActivity<Page extends Enum<Page>> extends
pageOrder.add(null);
}
}
+ viewPagerAdapter.notifyDataSetChanged();
viewPager.setCurrentItem(startPageIndex, false);
}
@@ -236,15 +234,19 @@ public abstract class AbstractViewPagerActivity<Page extends Enum<Page>> extends
final Pair<List<? extends Page>, Integer> pagesAndIndex = getOrderedPages();
pageOrder.addAll(pagesAndIndex.getLeft());
+ // Since we just added pages notifyDataSetChanged needs to be called before we possibly setCurrentItem below.
+ // But, calling it will reset current item and we won't be able to tell if we would have been out of bounds
+ final int currentItem = getCurrentItem();
+
+ // notify the adapter that the data has changed
+ viewPagerAdapter.notifyDataSetChanged();
+
// switch to details page, if we're out of bounds
final int defaultPage = pagesAndIndex.getRight();
- if (getCurrentItem() < 0 || getCurrentItem() >= viewPagerAdapter.getCount()) {
+ if (currentItem < 0 || currentItem >= viewPagerAdapter.getCount()) {
viewPager.setCurrentItem(defaultPage, false);
}
- // notify the adapter that the data has changed
- viewPagerAdapter.notifyDataSetChanged();
-
// notify the indicator that the data has changed
titleIndicator.notifyDataSetChanged();
}