不在屏幕上时,Android Fragment会对Action Bar做出贡献

时间:2014-08-18 18:04:52

标签: android android-fragments android-actionbar-compat

如果我动态地将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"/>

1 个答案:

答案 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文件或添加/根据您所处的模式删除菜单项。