onCreateOptionsMenu 不要在 popbackstack 之后调用
onCreateOptionsMenu do not call after popbackstack
我通过单击菜单将片段 1 替换为片段 2:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
if (savedItemsExist()) {
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_call_to_delete_filter) {
SavedFiltersDeleteFragment newFragment = new SavedFiltersDeleteFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.flContent, newFragment);
transaction.addToBackStack(null);
transaction.commit();
return true;
}
}
return super.onOptionsItemSelected(item);
}
在片段 2 中,我想 return 到前一个片段:
getActivity().getSupportFragmentManager().popBackStack();
但是当我出现在片段 1 时,我看到了片段 2 中的菜单。
因此片段 1 中未调用 onCreateOptionsMenu
。我在 onStart()
方法中更新片段 1 的 UI,那么如何更新菜单?
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
if (savedItemsExist())
inflater.inflate(R.menu.menu_saved_filters, menu);
}
我也在Fragment 1的onStart()
方法中调用了invalidateOptionsMenu()
this.setHasOptionsMenu(true); also added in `onCreate()` of the Fragment 1.
所以我通过替换和提交新的 Fragment
而不是 popBackStack
来解决它
我通过单击菜单将片段 1 替换为片段 2:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
if (savedItemsExist()) {
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_call_to_delete_filter) {
SavedFiltersDeleteFragment newFragment = new SavedFiltersDeleteFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.flContent, newFragment);
transaction.addToBackStack(null);
transaction.commit();
return true;
}
}
return super.onOptionsItemSelected(item);
}
在片段 2 中,我想 return 到前一个片段:
getActivity().getSupportFragmentManager().popBackStack();
但是当我出现在片段 1 时,我看到了片段 2 中的菜单。
因此片段 1 中未调用 onCreateOptionsMenu
。我在 onStart()
方法中更新片段 1 的 UI,那么如何更新菜单?
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
if (savedItemsExist())
inflater.inflate(R.menu.menu_saved_filters, menu);
}
我也在Fragment 1的onStart()
方法中调用了invalidateOptionsMenu()
this.setHasOptionsMenu(true); also added in `onCreate()` of the Fragment 1.
所以我通过替换和提交新的 Fragment
而不是 popBackStack