大佬教程收集整理的这篇文章主要介绍了android – 使用ActionBarSherlock在SearchView上的NullPointerException,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在第269行获得了Nullpointer,如下所示.我已经验证SearchView为null,而不是SearchManager.虽然,菜单也是空的,但我不确定这是否正常?重要提示:在我的Android 4.0和4.1测试中,它仅为空.在2.3,它很棒!
这是我的SearchView代码:
@Override public Boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getSupportMenuInflater(); inflater.inflate(R.menu.menu,menu); SearchManager searchManager = (SearchManager) getSystemservice(Context.SEARCH_serviCE); SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); // line 269 searchView.setSearchableInfo( searchManager.getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(true); searchView.setSubmitButtonEnabled(true); return true; }
<item android:id="@+id/menu_search" android:actionViewClass="com.actionbarsherlock.widget.SearchView" android:icon="@android:drawable/ic_menu_search" android:showAsAction="always" android@R_463_6964@="search"/>
logcat的
FATAL EXCEPTION: main java.lang.NullPointerException at com.---.---.master.MainFragmentActivity .setupSearchView(MainFragmentActivity.java:269) at com.---.---.master.MainFragmentActivity.onCreateOptionsMenu( MainFragmentActivity.java:258) at android.support.v4.app.Watson.onCreatePanelMenu(Watson.java:45) at com.actionbarsherlock.ActionBarSherlock.callBACkCreateOptionsMenu( ActionBarSherlock.java:559) at com.actionbarsherlock.internal.ActionBarSherlockCompat.preparePanel( ActionBarSherlockCompat.java:479) at com.actionbarsherlock.internal.ActionBarSherlockCompat .dispatchInvalidateOptionsMenu(ActionBarSherlockCompat.java:272) at com.actionbarsherlock.internal.ActionBarSherlockCompat$1.run( ActionBarSherlockCompat.java:984) at android.os.Handler.handleCallBACk(Handler.java:587) at android.os.Handler.dispatchmessage(Handler.java:92) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:3683) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run( ZygoteInit.java:839) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) at dalvik.system.NativeStart.main(Native Method)
进口:
import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.app.SherlockListFragment; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import com.actionbarsherlock.widget.SearchView; import android.app.SearchManager;
再次,我只在4.0模拟器和4.1设备上获得Null指针.应用程序在2.3中运行良好.有一次,ActionBarSherlock之前,使用相同的代码,除了通过正常的方式导入SearchView(而不是Sherlock),它在4.0中运行良好.我试图使我的应用程序向后兼容,并打破了较新的Android版本,但在较旧版本中效果很好.
编辑:当菜单项有android:actionViewClass =“android.app.SearchView”时,它实际上是2.3中的Null和4.0中的Cast Issue
然后我将其更改为android:actionViewClass =“com.actionbarsherlock.widget.SearchView”
现在在2.3中固定,在4.0中固定
更新:我似乎用黑客修复它:
我添加了@L_403_1@menu-v11文件夹,添加了@L_403_1@menu.xml的重复文件,只有一个项目更改:android:actionViewClass =“android.app.SearchView”,否则它与其他menu.xml文件相同.
在Java中,我这样做了:
@Override public Boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getSupportMenuInflater(); inflater.inflate(R.menu.menu,menu); MenuItem searchItem = menu.findItem(R.id.menu_search); SearchManager searchManager = (SearchManager) getSystemservice(Context.SEARCH_serviCE); if (Build.VERSION.SDK_INT < Build.VERSION_CODEs.HONEYCOMB) { SearchView searchView = (SearchView) searchItem.getActionView(); searchView.setSearchableInfo(searchManager .getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(true); searchView.setSubmitButtonEnabled(true); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODEs.HONEYCOMB) { setupNewSearchView(searchItem,searchManager); } return true; } @TargetApi(Build.VERSION_CODEs.HONEYCOMB) private void setupNewSearchView(MenuItem searchItem,SearchManager searchManager) { android.widget.SearchView searchView = (android.widget.SearchView) searchItem.getActionView(); searchView.setSearchableInfo(searchManager .getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(true); searchView.setSubmitButtonEnabled(true); }
以上是大佬教程为你收集整理的android – 使用ActionBarSherlock在SearchView上的NullPointerException全部内容,希望文章能够帮你解决android – 使用ActionBarSherlock在SearchView上的NullPointerException所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。