onCreateOptionsMenu在JB 4.2上的onResume之后调用

我在我的应用程序中有以下片段:

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); } } 

基本上,当用户启动活动,我想要显示一个进度微调,在操作栏,直到加载完成。 在Android 4.2之前,一切正常。 在Android 4.2上,我得到以下错误:

 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) 

在添加了一些断点后,我意识到onCreateOptionsMenu在onActivityCreated之后被调用。 我可以使用另一个生命周期事件吗? 有没有更好的方法来达到预期的效果?

Solutions Collecting From Web of "onCreateOptionsMenu在JB 4.2上的onResume之后调用"

我用这种方式使用onPrepareOptionsMenu来实现你正在做的事情。 (没有testing,但应该给你一个想法。)

 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(); }