Only show options menu of the active item in a ViewPager (#335)

This commit is contained in:
inorichi
2017-07-28 17:54:12 +02:00
committed by Eric Kuck
parent ff105abf12
commit 0987b311d9
@@ -30,6 +30,7 @@ public abstract class RouterPagerAdapter extends PagerAdapter {
private SparseArray<Bundle> savedPages = new SparseArray<>();
private SparseArray<Router> visibleRouters = new SparseArray<>();
private ArrayList<Integer> savedPageHistory = new ArrayList<>();
private Router currentPrimaryRouter;
/**
* Creates a new RouterPagerAdapter using the passed host.
@@ -77,6 +78,12 @@ public abstract class RouterPagerAdapter extends PagerAdapter {
router.rebindIfNeeded();
configureRouter(router, position);
if (router != currentPrimaryRouter) {
for (RouterTransaction transaction : router.getBackstack()) {
transaction.controller().setOptionsMenuHidden(true);
}
}
visibleRouters.put(position, router);
return router;
}
@@ -99,6 +106,24 @@ public abstract class RouterPagerAdapter extends PagerAdapter {
visibleRouters.remove(position);
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
Router router = (Router)object;
if (router != currentPrimaryRouter) {
if (currentPrimaryRouter != null) {
for (RouterTransaction transaction : currentPrimaryRouter.getBackstack()) {
transaction.controller().setOptionsMenuHidden(true);
}
}
if (router != null) {
for (RouterTransaction transaction : router.getBackstack()) {
transaction.controller().setOptionsMenuHidden(false);
}
}
currentPrimaryRouter = router;
}
}
@Override
public boolean isViewFromObject(View view, Object object) {
Router router = (Router)object;