Tôi có mảnh sau đây trong ứng dụng của tôi:onCreateOptionsMenu gọi sau onResume trên 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);
}
}
Về cơ bản khi người dùng khởi động Hoạt động Tôi muốn hiển thị một spinner tiến bộ, trong actionbar, cho đến khi bộ nạp hoàn tất. Trước khi Android 4.2 mọi thứ hoạt động tốt. Trên Android 4.2, tôi nhận được lỗi sau:
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)
Sau khi thêm một số điểm ngắt tôi đã nhận ra onCreateOptionsMenu đã được gọi sau onActivityCreated. Có sự kiện vòng đời nào khác mà tôi có thể sử dụng không? Có cách nào tốt hơn để đạt được hiệu quả mong muốn?
Um, tại sao không di chuyển 'setActionView của bạn() 'gọi cho' onCreateOptionsMenu() ', sau đó? Và có lẽ làm điều đó tùy thuộc vào việc tải có được thực hiện hay không? – CommonsWare
Kinda hoạt động. Có vẻ như 'onCreateOptionsMenu' được gọi sau' onLoadFinished'. Vì tôi có các tab có nhiều bộ tải 'hasRunningLoaders' không hữu ích trong việc xác định xem tải đã kết thúc chưa. Đoán tôi sẽ phải sử dụng một giá trị Boolean để theo dõi trạng thái. – Frohnzie
Sự cố Android: http://code.google.com/p/android/issues/detail?id=39721 – Frohnzie