我有一个片段,我可以调用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);
}
答案 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);
}