我有3个片段:A, B, C
和ActionItem
,称为Filters
。仅当片段Filters
分别可见时,这些A
才可见。
所以,当Filters
或B
替换C
时隐藏A
,并在替换A
时恢复它们。
除非我改变屏幕方向,否则工作正常。 Filters
在此之后变得可见。
我尝试了什么:
在Activity中代表片段导航覆盖onConfigurationChanged()
我检查了可见的Fragment
以及B
或C
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()
片段B
和C
中。
可能有人有这样的问题。请帮忙。
P.S。请告诉我是否需要更多代码。感谢
答案 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();
}