在片段添加和放大后,不会调用onCreateOptionsMenu。去掉

时间:2018-04-03 14:38:43

标签: java android android-fragments android-menu

我有一个片段,我可以调用ActivityCompat.invalidateOptionsMenu(getActivity());,并且成功调用方法onCreateOptionsMenu():Activity和Fragment。

然而,当我在片段顶部添加一个片段:

transaction.add(R.id.fragment_home, fragment2, "fragment_ID");
transaction.addToBackStack(null);
transaction.commit();

以后关闭它(通过backPress或getSupportFragmentManager().popBackStack();),ActivityCompat.invalidateOptionsMenu(getActivity());变得无法响应。根本没有调用onCreateOptionsMenu()

我确信,如果我使用replace()代替add(),它会有效,但是,由于某些原因,我需要使用add()

on Activity:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_home);
    if (fragment != null)
        fragment.onCreateOptionsMenu(menu, getMenuInflater());
    return true;
}
片段1上的

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    Log.d(TAG, "onCreateOptionsMenu() called with: ...");
    // additional code
    super.onCreateOptionsMenu(menu, inflater);
}

1 个答案:

答案 0 :(得分:0)

请尝试以下代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_home);
    if (fragment != null) {
        fragment.onCreateOptionsMenu(menu, getMenuInflater());
        return true;
    }
    getMenuInflater().inflate(R.menu.menu_layout, menu);
    return super.onCreateOptionsMenu(menu);
}