I have the following fragment in my application:
public class MyFragment extends SherlockListFragment implements LoaderManager.LoaderCallbacks<Cursor> {
private MenuItem refresh = null;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
//.....
// NPE here
refresh.setActionView(R.layout.indeterminate_progress_action);
getActivity().getSupportLoaderManager().initLoader(0, null, this);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.refresh_menu, menu);
refresh = (MenuItem) menu.findItem(R.id.menu_item_refresh);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
refresh.setActionView(null);
}
}
Basically when the user starts the Activity I want to display a progress spinner, in the actionbar, until the loader completes. Prior to Android 4.2 everything worked fine. On Android 4.2 I get the following error:
11-24 13:37:14.811: E/AndroidRuntime(17850): Caused by: java.lang.NullPointerException
11-24 13:37:14.811: E/AndroidRuntime(17850): at com.MyApp.library.fragments.MyFragment.onActivityCreated(TabFragment.java:65)
After adding some break point I realized onCreateOptionsMenu was getting called after onActivityCreated. Is there another life cycle event I can use? Is there a better was to achieve the desired effect?
I've used onPrepareOptionsMenu
in this way to achieve what you are trying to do.
(not tested but should give you an idea.)
private boolean mIsLoading = true;
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
refresh = (MenuItem) menu.findItem(R.id.menu_item_refresh);
if (!mIsLoading) {
refresh.setActionView(null);
}
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
mIsLoading = false;
getActivity().invalidateOptionsMenu();
}
来源:https://stackoverflow.com/questions/13544355/oncreateoptionsmenu-called-after-onresume-on-jb-4-2