Hiding/showing the contextual action bar programmatically

烈酒焚心 提交于 2019-12-06 02:38:20

问题


My use case:

I have an activity with a ViewPager as its only view element, set up with three Fragments for its three pages (using a FragmentPagerAdapter). One of these fragments is a ListFragment, while the other two regular Fragments containing some infographics.

The list in the ListFragment allows "checking" elements, and checking elements brings up the contextual action bar, presenting a list of actions possible on the selected/checked items.

My problem:

When I select a couple of list items, the CAB shows up. But when I switch pages, the CAB stays visible, presenting the actions. To make matters worse, the ViewPager seems to sometimes destroy the view of the list fragment - hence selecting the actions throws a "java.lang.IllegalStateException: Content view not yet created" exception.

My questions:

  1. How do I get the CAB to disappear when the user moves away from the ListFragment page?
  2. (optional) How do I get the CAB to reappear when the ListFragment back is and some items are still checked.

回答1:


You need to first add a ViewPager.OnPageChangeListener with ViewPager.OnPageChangeListener to your viewPager.

In the onPageSelected method call a method in your ListFragment to dismiss your CAB.

EDIT:

To get the current active fragment you can use it's tag. The tag can be computated with this method:

private static String makeFragmentName(int viewId, int index) {
   return "android:switcher:" + viewId + ":" + index;
}

where viewId is the id of the viewpager and index the tab index (position)




回答2:


You can also react to the fragment being hidden from inside the fragment by using the method setUserVisibleHint, as explained in https://stackoverflow.com/a/11075663/1199911



来源:https://stackoverflow.com/questions/15019289/hiding-showing-the-contextual-action-bar-programmatically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!