我在我的應用程序下面的代碼片段:onCreateOptionsMenu的onResume後呼籲JB 4.2
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)
加入一些破發點,我意識到onActivityCreated後onCreateOptionsMenu漸漸稱爲後。我可以使用另一個生命週期事件嗎?有沒有更好的方法來達到預期的效果?
嗯,爲什麼不將你的'setActionView()'調用'onCreateOptionsMenu()',然後呢?也許根據負載是否完成而有條件地進行? – CommonsWare
有點有用。看起來像'onCreateOptionsMenu'也在'onLoadFinished'之後被調用。由於我有多個加載器的標籤'hasRunningLoaders'在確定加載是否完成時沒有用處。猜猜我將不得不使用布爾值來跟蹤狀態。 – Frohnzie
Android問題:http://code.google.com/p/android/issues/detail?id=39721 – Frohnzie