以编程方式隐藏/显示上下文操作栏

时间:2013-02-22 07:50:11

标签: android android-viewpager android-listfragment contextual-action-bar

我的用例:

我有一个ViewPager作为唯一视图元素的活动,为其三个页面设置了三个Fragment(使用FragmentPagerAdapter)。其中一个片段是ListFragment,而另外两个常规Fragment包含一些信息图。

ListFragment中的列表允许“检查”元素,并且检查元素会显示上下文操作栏,显示所选/已检查项目上可能的操作列表。

我的问题:

当我选择几个列表项时,CAB会显示出来。但是当我切换页面时,CAB保持可见,呈现动作。更糟糕的是,ViewPager似乎有时会破坏列表片段的视图 - 因此选择操作会引发"java.lang.IllegalStateException: Content view not yet created"异常。

我的问题:

  1. 当用户离开ListFragment页面时,如何让CAB消失?
  2. (可选)当ListFragment后退并且仍然检查某些项目时,如何让CAB重新出现。

2 个答案:

答案 0 :(得分:1)

您需要先向ViewPager.OnPageChangeListener添加ViewPager.OnPageChangeListener viewPager

onPageSelected 方法中,调用ListFragment中的方法来关闭您的CAB。

修改

要获取当前活动片段,您可以使用它的标记。可以使用此方法计算标记:

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

其中viewId是viewpager的id并索引选项卡索引(位置)

答案 1 :(得分:0)

您还可以使用方法setUserVisibleHint对片段内部隐藏的片段做出反应,如https://stackoverflow.com/a/11075663/1199911

中所述。