android - 在 JB 4.2 上的 onResume 之后调用 onCreateOptionsMenu

标签 android android-fragments android-actionbar android-4.2-jelly-bean

我的应用程序中有以下 fragment :

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

基本上,当用户启动 Activity 时,我想在操作栏中显示进度微调器,直到加载器完成。在 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 之后被调用。我可以使用另一个生命周期事件吗?有没有更好的方法来达到预期的效果?

最佳答案

我以这种方式使用 onPrepareOptionsMenu 来实现您想要做的事情。 (未经测试,但应该给你一个想法。)

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

关于android - 在 JB 4.2 上的 onResume 之后调用 onCreateOptionsMenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13544355/

相关文章:

android - 如何截断TextView,然后在Android中添加省略号

android - 如何编译 Youtube WatchMe?

android - 我如何在不使用对话框的情况下在操作栏上方显示 View ?

android - 在操作栏 android 中显示 Logo 和应用程序名称

java - 我应该如何在android中使用JWT?

android - 具有相同菜单、相同布局的 fragment 会导致重复的菜单项

java - 我无法在 Android Fragment 中使用 textview 填充 gridview

java - 根据 ListView 中的点击替换 fragment

android - 如何在操作栏中显示进度条,代替其他操作栏项目

android - 如何锁定屏幕以不允许在一个 fragment 上旋转