如果我动态地将Fragment
(使用FragmentManager
)添加到横向XML中定义的容器中,然后切换到纵向,则动态注入的Fragment
仍然存在。即使它不可见,它也会为Action Bar
做出贡献。什么是阻止这种情况发生的好方法/设计?
我已尝试在isVisible
的{{1}}中使用onCreateOptionsMenu
,但这会导致某些Android版本出现问题,因为在Fragment
之前调用onCreateOptionsMenu
会导致onCreateView
即使片段在当前配置下可见。
注意:我自己没有处理配置。我没有在清单中指定false
而我没有覆盖configChanges
。
活动:
onConfigurationChanged
活动肖像XML
// inject detail fragment
Fragment detailFragment = getSupportFragmentManager().findFragmentById(R.id.detail_container);
if(detailFragment == null)
getSupportFragmentManager().beginTransaction().replace(R.id.detail_container, DetailFragment.newInstance(id)).commit();
// inject master fragment
if(findViewById(R.id.master_container) != null) {
masterDetail = true;
Fragment listFragment = getSupportFragmentManager().findFragmentById(R.id.master_container);
if(listFragment == null)
getSupportFragmentManager().beginTransaction().replace(R.id.master_container, ListFragment.newInstance(position)).commit();
}
活动格局XML
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/detail_container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
答案 0 :(得分:0)
我根据您的解释遵循的模型。
public class MyActivity extends Activity {
boolean mMultiPane = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FrameLayout masterContainer = (FrameLayout) findViewById(R.id.master_container);
if (masterContainer != null)
mMultiPane = true;
...
}
}
从那时起Activity
,您可以使用mMultiPane
变量更改行为,包括更改选项菜单的设置方式(只有两个不同的menu.xml
文件或添加/根据您所处的模式删除菜单项。