android – 使用ActionBarSherlock在SearchView上的NullPointerException

android – 使用ActionBarSherlock在SearchView上的NullPointerException,第1张

概述我正在使用ActionBarSherlock和支持库v4.这是一个’SherlockFragmentActivity’. 我在第269行获得了Nullpointer,如下所示.我已经验证SearchView为null,而不是SearchManager.虽然,菜单也是空的,但我不确定这是否正常?重要提示:在我的Android 4.0和4.1测试中,它仅为空.在2.3,它很棒! 这是我的SearchV 我正在使用ActionbarSherlock和支持库v4.这是一个’SherlockFragmentActivity’.

我在第269行获得了Nullpointer,如下所示.我已经验证SearchVIEw为null,而不是SearchManager.虽然,菜单也是空的,但我不确定这是否正常?重要提示:在我的Android 4.0和4.1测试中,它仅为空.在2.3,它很棒!

这是我的SearchVIEw代码:

@OverrIDepublic 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:title="search"/>

logcat的

FATAL EXCEPTION: mainjava.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.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中固定

更新:我似乎用黑客修复它:

我添加了一个menu-v11文件夹,添加了一个menu.xml的重复文件,只有一个项目更改:androID:actionVIEwClass =“androID.app.SearchVIEw”,否则它与其他menu.xml文件相同.

在Java中,我这样做了:

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

好吧,它有效,但我还没有把它作为一个答案,因为它似乎是黑客的做法.开放更好的想法?

解决方法 在ActionbarSherlock(或ActionbarSherlock HoloEverywhere theme.Sherlock.light.DarkActionbar?)中缺少v14(和v11?)的attrs有问题.

 

Simple solution and details in the issue thread…

总结

以上是内存溢出为你收集整理的android – 使用ActionBarSherlock在SearchView上的NullPointerException全部内容,希望文章能够帮你解决android – 使用ActionBarSherlock在SearchView上的NullPointerException所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1126816.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存