用于ActionBar搜索的ExpandedView上的空指针

时间:2013-06-17 17:12:29

标签: android android-fragments nullpointerexception android-actionbar searchview

我的SearchView中有一个ActionBar。我还有MainFragmentActivity加载onCreateOptionsMenu中的搜索。当我Fragment进出SearchView时,Fragment可以正常工作 - 除了一个例外:特别是FragmentTransaction t = fm.beginTransaction(); SherlockListFragment mFrag = new RateReviewFragment(); t.add(R.id.main_frag, mFrag); t.setCustomAnimations(R.anim.animation_leave, R.anim.animation_enter, R.anim.animation_leave, R.anim.animation_enter); t.show(mFrag); t.addToBackStack(null); t.commit(); ,我加载如下:

06-17 10:03:33.668: E/AndroidRuntime(9224): FATAL EXCEPTION: main
06-17 10:03:33.668: E/AndroidRuntime(9224): java.lang.NullPointerException
06-17 10:03:33.668: E/AndroidRuntime(9224):     at com.android.internal.widget.ActionBarView$ExpandedActionViewMenuPresenter.expandItemActionView(ActionBarView.java:1470)
06-17 10:03:33.668: E/AndroidRuntime(9224):     at com.android.internal.view.menu.MenuBuilder.expandItemActionView(MenuBuilder.java:1233)
06-17 10:03:33.668: E/AndroidRuntime(9224):     at com.android.internal.view.menu.MenuItemImpl.expandActionView(MenuItemImpl.java:620)
06-17 10:03:33.668: E/AndroidRuntime(9224):     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:879)
06-17 10:03:33.668: E/AndroidRuntime(9224):     at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:524)
06-17 10:03:33.668: E/AndroidRuntime(9224):     at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:131)
06-17 10:03:33.668: E/AndroidRuntime(9224):     at android.view.View.performClick(View.java:4102)
06-17 10:03:33.668: E/AndroidRuntime(9224):     at android.view.View$PerformClick.run(View.java:17085)
06-17 10:03:33.668: E/AndroidRuntime(9224):     at android.os.Handler.handleCallback(Handler.java:615)
06-17 10:03:33.668: E/AndroidRuntime(9224):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-17 10:03:33.668: E/AndroidRuntime(9224):     at android.os.Looper.loop(Looper.java:155)
06-17 10:03:33.668: E/AndroidRuntime(9224):     at android.app.ActivityThread.main(ActivityThread.java:5454)
06-17 10:03:33.668: E/AndroidRuntime(9224):     at java.lang.reflect.Method.invokeNative(Native Method)
06-17 10:03:33.668: E/AndroidRuntime(9224):     at java.lang.reflect.Method.invoke(Method.java:511)
06-17 10:03:33.668: E/AndroidRuntime(9224):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
06-17 10:03:33.668: E/AndroidRuntime(9224):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
06-17 10:03:33.668: E/AndroidRuntime(9224):     at dalvik.system.NativeStart.main(Native Method)

这里唯一的区别是我将它添加到后台堆栈中。当我在这个片段显示时尝试在ActionBar中点击SearchView,或者在此片段显示之后的任何片段(在此片段关闭后我弹出后面的堆栈并清除它),然后我得到以下错误。它很难诊断,因为它没有显示在我的代码中。

android:title="Search"
android:showAsAction="always|collapseActionView"

这是我收到此错误后为数不多的变化之一:

FragmentActivity

此外,这在searchView.setOnQueryTextListener(new OnQueryTextListener() { public boolean onQueryTextChange(String arg0) { // TODO Auto-generated method stub return false; } public boolean onQueryTextSubmit(String arg0) { if (searchItem != null) { searchItem.collapseActionView(); } return false; } });

SearchView

这已实施,因此ActionBarSherlock在提交时自动关闭。注意:我使用的是{{1}}。

1 个答案:

答案 0 :(得分:9)

我遇到了完全相同的问题。经过大量痛苦的试验和错误后,我终于发现,在我的情况下,问题是将图标设置为null:

getSupportActionBar().setIcon(null);

在执行此操作后,ActionBarSherlock在尝试显示ActionView时发生加密崩溃。

我希望你的情况类似。