ActionItem出现在方向更改上

时间:2015-02-24 16:28:59

标签: android android-fragments android-actionbar

我有3个片段:A, B, CActionItem,称为Filters。仅当片段Filters分别可见时,这些A才可见。

所以,当FiltersB替换C时隐藏A,并在替换A时恢复它们。

除非我改变屏幕方向,否则工作正常。 Filters在此之后变得可见。

我尝试了什么:

在Activity中代表片段导航覆盖onConfigurationChanged()我检查了可见的Fragment以及BC i hideActionFilters()

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
....//other logic

//check if backStack empty
if (getSupportFragmentManager().getBackStackEntryCount() != 0) {
        //check top fragment by position and name in backstack
        //LessonsFragment - B; SingleLessonFragment - C
        if (getTopFragment().getClass().getName().equals(LessonsFragment.class.getName()) ||
                getTopFragment().getClass().getName().equals(SingleLessonFragment.class.getName())) {
            hideActionFilterItem();
        }
    }

这不起作用。 方法hideActionItem()

    private void hideActionFilterItem() {
    View menuItemView = findViewById(R.id.action_filters);
    if (menuItemView != null) {
        menuItemView.setVisibility(View.GONE);
    }
}

尝试调试,它运行hideActionItem()ActionItem仍然可见。

我也试图隐藏在onPause();在onConfogChanged()片段BC中。

可能有人有这样的问题。请帮忙。

P.S。请告诉我是否需要更多代码。感谢

1 个答案:

答案 0 :(得分:1)

更改方向时,视图会完全重新创建,因此您需要在onCreate()中处理您的情况。

要显示的片段由FragmentManager自动处理,但我认为每次创建视图时都必须“重新指定”,应隐藏过滤器。我建议你查看片段A是否可见,如果没有,请调用hideActionItem()方法:

public void onCreate (){
...
//Get the Fragment A using the fragmentManager
  FragmentA frag = (FragmentA)  getFragmentManager().findFragmentByTag(the_tag_you_used_to_add_the_fragment);
  if(frag!=null){
    if(!frag.isVisible())
       hideActionItem();
    }
   else hideActionItem();
}