片段中的OnPrepareOptionsMenu在设备上具有不同的行为

时间:2016-03-04 14:04:31

标签: android android-fragments interface callback android-support-library

此代码在某些设备上崩溃,但在其他设备上运行正常。

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    boolean isSelectModeActive = mRecyclerAdapter.getSelectedItemCount() > 0;
    mCallback.onChangeMenuInSelectionMode(menu, isSelectModeActive);
}

我在onAttach方法中附加回调:

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    Activity activity = (Activity) context;
    try {
        mCallback = (iSongsListFragmentEventListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                                             + " must implement iSongsListFragmentEventListener");
    }
}

堆栈跟踪说onPrepareOptions方法中的mCallback为null,但为什么呢? 我在我的nexus 4和所有模拟器上测试了这段代码 - 没有崩溃,但有些用户崩溃了。

Fatal Exception: java.lang.NullPointerException: Attempt to invoke interface method 'void chuprin.serg.com.autotagger.fragments.SongsListFragment$iSongsListFragmentEventListener.onChangeMenuInSelectionMode(android.view.Menu, boolean)' on a null object reference
   at chuprin.serg.com.autotagger.fragments.SongsListFragment.onPrepareOptionsMenu(SongsListFragment.java:292)

1 个答案:

答案 0 :(得分:0)

你在哪里调用片段中的setHasOptionsMenu(true)?它在构造函数中吗?从onCreate()调用它。