ActionBarSherlock - SearchView 为空?

2024-03-18

我正在 SherlockListActivity 中的操作栏中添加搜索功能,但是,当我尝试实例化 SearchView 时,它始终为 null:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.activity_main_menu, menu);
    SearchView searchView = (SearchView) menu.findItem(R.id.activity_main_menu_search).getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
            public boolean onQueryTextSubmit(String p1){
                List<Application> auxList = Search.search(mContext, p1);
                AdapterApp aux = new AdapterApp(mContext, auxList);
                setListAdapter(aux);
                getListView().setOnItemClickListener(aux.getItemClickListener());
                return true;
            }

            public boolean onQueryTextChange(String p1){
                return false;
            }           
    });
    return super.onCreateOptionsMenu(menu);
}

活动_主_菜单.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/activity_main_menu_search"
        android:title="@string/search"
        android:icon="@android:drawable/ic_menu_search"
        android:showAsAction="ifRoom|collapseActionView"
        android:actionViewClass="com.actionbarsherlock.widget.SearchView " />

    <item android:id="@+id/activity_main_menu_purchase"
        android:title="@string/purchase"
        android:icon="@drawable/ic_launcher_market_holo"
        android:showAsAction="ifRoom|collapseActionView" />

</menu>

另外我不得不说我已经正确导入了所需的类:

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.OnNavigationListener;
import com.actionbarsherlock.app.SherlockListActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.MenuItem.OnActionExpandListener;
import com.actionbarsherlock.widget.SearchView;

这是堆栈跟踪。当 SearchView 实例化时,日志返回以下内容:

06-03 19:42:43.128: W/dalvikvm(15936): dvmFindClassByName rejecting 'com.actionbarsherlock.widget.SearchView '
06-03 19:42:43.138: W/MenuInflater(15936): Cannot instantiate class: com.actionbarsherlock.widget.SearchView 
06-03 19:42:43.138: W/MenuInflater(15936): java.lang.ClassNotFoundException: Didn't find class "com.actionbarsherlock.widget.SearchView " on path: /data/app/com.iamaner.oneclickfreeze-1.apk
06-03 19:42:43.138: W/MenuInflater(15936):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)
06-03 19:42:43.138: W/MenuInflater(15936):  at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
06-03 19:42:43.138: W/MenuInflater(15936):  at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
06-03 19:42:43.138: W/MenuInflater(15936):  at com.actionbarsherlock.view.MenuInflater$MenuState.newInstance(MenuInflater.java:486)
06-03 19:42:43.138: W/MenuInflater(15936):  at com.actionbarsherlock.view.MenuInflater$MenuState.setItem(MenuInflater.java:447)
06-03 19:42:43.138: W/MenuInflater(15936):  at com.actionbarsherlock.view.MenuInflater$MenuState.addItem(MenuInflater.java:468)
06-03 19:42:43.138: W/MenuInflater(15936):  at com.actionbarsherlock.view.MenuInflater.parseMenu(MenuInflater.java:190)
06-03 19:42:43.138: W/MenuInflater(15936):  at com.actionbarsherlock.view.MenuInflater.inflate(MenuInflater.java:112)
06-03 19:42:43.138: W/MenuInflater(15936):  at com.iamaner.oneclickfreeze.ActivityMain.onCreateOptionsMenu(ActivityMain.java:131)
06-03 19:42:43.138: W/MenuInflater(15936):  at com.actionbarsherlock.app.SherlockListActivity.onCreatePanelMenu(SherlockListActivity.java:184)
06-03 19:42:43.138: W/MenuInflater(15936):  at com.actionbarsherlock.ActionBarSherlock.callbackCreateOptionsMenu(ActionBarSherlock.java:559)
06-03 19:42:43.138: W/MenuInflater(15936):  at com.actionbarsherlock.internal.ActionBarSherlockNative.dispatchCreateOptionsMenu(ActionBarSherlockNative.java:65)
06-03 19:42:43.138: W/MenuInflater(15936):  at com.actionbarsherlock.app.SherlockListActivity.onCreateOptionsMenu(SherlockListActivity.java:149)
06-03 19:42:43.138: W/MenuInflater(15936):  at android.app.Activity.onCreatePanelMenu(Activity.java:2490)
06-03 19:42:43.138: W/MenuInflater(15936):  at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:458)
06-03 19:42:43.138: W/MenuInflater(15936):  at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:820)
06-03 19:42:43.138: W/MenuInflater(15936):  at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:248)
06-03 19:42:43.138: W/MenuInflater(15936):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
06-03 19:42:43.138: W/MenuInflater(15936):  at android.view.Choreographer.doCallbacks(Choreographer.java:562)
06-03 19:42:43.138: W/MenuInflater(15936):  at android.view.Choreographer.doFrame(Choreographer.java:531)
06-03 19:42:43.138: W/MenuInflater(15936):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
06-03 19:42:43.138: W/MenuInflater(15936):  at android.os.Handler.handleCallback(Handler.java:725)
06-03 19:42:43.138: W/MenuInflater(15936):  at android.os.Handler.dispatchMessage(Handler.java:92)
06-03 19:42:43.138: W/MenuInflater(15936):  at android.os.Looper.loop(Looper.java:137)
06-03 19:42:43.138: W/MenuInflater(15936):  at android.app.ActivityThread.main(ActivityThread.java:5231)
06-03 19:42:43.138: W/MenuInflater(15936):  at java.lang.reflect.Method.invokeNative(Native Method)
06-03 19:42:43.138: W/MenuInflater(15936):  at java.lang.reflect.Method.invoke(Method.java:511)
06-03 19:42:43.138: W/MenuInflater(15936):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)

然后,SearchView 为 null,因此在调用 SearchView.setOnQueryTextListener(); 时出现 NullPointerException;

06-03 19:42:43.148: E/AndroidRuntime(15936): FATAL EXCEPTION: main
06-03 19:42:43.148: E/AndroidRuntime(15936): java.lang.NullPointerException
06-03 19:42:43.148: E/AndroidRuntime(15936):    at com.iamaner.oneclickfreeze.ActivityMain.onCreateOptionsMenu(ActivityMain.java:133)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at com.actionbarsherlock.app.SherlockListActivity.onCreatePanelMenu(SherlockListActivity.java:184)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at com.actionbarsherlock.ActionBarSherlock.callbackCreateOptionsMenu(ActionBarSherlock.java:559)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at com.actionbarsherlock.internal.ActionBarSherlockNative.dispatchCreateOptionsMenu(ActionBarSherlockNative.java:65)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at com.actionbarsherlock.app.SherlockListActivity.onCreateOptionsMenu(SherlockListActivity.java:149)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at android.app.Activity.onCreatePanelMenu(Activity.java:2490)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:458)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:820)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:248)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at android.view.Choreographer.doCallbacks(Choreographer.java:562)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at android.view.Choreographer.doFrame(Choreographer.java:531)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at android.os.Handler.handleCallback(Handler.java:725)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at android.os.Handler.dispatchMessage(Handler.java:92)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at android.os.Looper.loop(Looper.java:137)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at android.app.ActivityThread.main(ActivityThread.java:5231)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at java.lang.reflect.Method.invokeNative(Native Method)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at java.lang.reflect.Method.invoke(Method.java:511)
06-03 19:42:43.148: E/AndroidRuntime(15936):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)

我浪费了一整天的时间寻找错误的原因,但没有成功......请我需要帮助


好吧,错误本身是由 ActionBarSherlock 库引起的,您可以在 GitHub 中找到该问题:https://github.com/JakeWharton/ActionBarSherlock/issues/685 https://github.com/JakeWharton/ActionBarSherlock/issues/685

这里发布的评论是我的解决方案:https://github.com/JakeWharton/ActionBarSherlock/issues/685#issuecomment-11670533 https://github.com/JakeWharton/ActionBarSherlock/issues/685#issuecomment-11670533

转到 ABS 库项目的 res/values-v14/abs_themes.xml:然后您应该像这样编辑前两个主题:

<style name="Sherlock.__Theme" parent="android:Theme.Holo">
    <item name="textColorPrimary">@color/abs__primary_text_holo_light</item>
    <item name="textColorPrimaryInverse">@color/abs__primary_text_holo_dark</item>
</style>
<style name="Sherlock.__Theme.Light" parent="android:Theme.Holo.Light">
    <item name="textColorPrimary">@color/abs__primary_text_holo_light</item>
    <item name="textColorPrimaryInverse">@color/abs__primary_text_holo_dark</item>
</style>

另外,不要忘记在清单中声明使用它的那些活动:

android:theme="@style/Theme.Sherlock.Light"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ActionBarSherlock - SearchView 为空? 的相关文章

  • 在 Android 中从麦克风录制 wav 文件 - 问题

    我需要能够使用 Android 中的麦克风创建 WAV 文件 目前 我遇到了很多麻烦 到目前为止 这就是我的情况 我正在使用 micDroid 项目代码的一部分来记录 read thread int sampleRate 44100 int
  • GCM 无法唤醒设备

    我正在开发 GCM 应用程序 当设备不空闲时 即按电源按钮休眠 一切正常 但是 当我在设备空闲时发送消息时 设备不会唤醒 我做了以下事情 已验证服务器应用程序中的delay while idle未设置为true 每条消息使用不同的折叠键 多
  • 如何解决:无法解析:com.mapbox.mapboxsdk:mapbox-android-sdk:9.5.0

    我在Android studio中尝试使用mapbox时遇到这个问题无法解析 com mapbox mapboxsdk mapbox android sdk 9 5 0 问题是什么 我的 build gradle 依赖项 dependenc
  • Android版本App更新代码

    我读到如果我们想更新Google Play中的应用程序 版本代码应该高于以前的apk文件 我有一个版本代码为 20 且版本名称为 1 0 的应用程序 那么要更新app 应该如何增加版本号呢 应该增加10吗 或者仅仅 1 就足够了 即版本代码
  • Android Studio Beta 频道、Android Studio Canary 频道、Android Studio Dev 频道有什么区别? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我是 android 新手 想知道要安装哪个 studio Android Studio Beta 频道 Android Studio Ca
  • android ndk 多点触控?

    我正在编写一个仅使用本机代码的应用程序 那么ndk中是否可以获取多点触控事件呢 我感觉我已经搜索了整个网络 但什么也没找到 有谁知道如何做到这一点 是的 您可以检查名为native activity查看如何获取输入事件 寻找engine h
  • Auto-value-gson出现接口错误,注册一个InstanceCreator?

    我有一个如下所示的接口类 public interface Species String name And a Human实现的类 AutoValue使用类型适配器 AutoValue public abstract class Human
  • 多种语言的多种字体

    我最近在开发应用程序时遇到了一种情况 我必须在文本视图中显示不同的语言 目前我正在展示一些使用字体 字体像这样 Typeface tf Typeface createFromAsset this getAssets DroidHindi t
  • 如何调试“com.android.okhttp”

    在android kitkat中 URLConnection的实现已经被OkHttp取代 如何调试呢 OkHttp 位于此目录中 external okhttp android main java com squareup okhttp 当
  • 在android中从JSON生成listview

    我对 Android 完全陌生 目前正在尝试从从我的服务器中提取的 JSON 数组生成列表视图 我已经阅读了很多教程 但没有运气 有一种独特的方法可以做到这一点 请您指出一些适合开始的资源 我读过了this http www josecgo
  • Android studio - 如何保存先前活动中选择的数据

    这是我的代码片段 这Textview充当按钮并具有Onclicklistner在他们 当cpu1000时Textview单击它会导致cpu g1000其代码如下所示的类 public class Game 1000 extends AppC
  • 是否可以将自定义属性添加到 Android 资源的样式中?

    我在我的项目中使用视图流组件 它允许开发人员覆盖一些属性 例如
  • 将 android 蓝牙客户端套接字连接到 ubuntu 服务器套接字时出现问题

    我正在编写一个 Android 应用程序 它应该通过蓝牙与服务器交换数据 服务器端位于运行 Ubuntu 的 PC 上 使用 bluez 库 用 C 或 C 编写 当我尝试连接到 PC 上的服务器套接字时 我的 Android 应用程序失败
  • react-native android fontFamily 不生效

    问题一 我在index android js的欢迎样式中添加了fontFamily 但没有效果 fontFamily 真的可以在 Android 上使用吗 欢迎 字体大小 20 fontFamily roboto thin 文本对齐 居中
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • Android 4.4 Kitkat 自定义视图操作栏未填充整个宽度

    我试图拥有一个带有自定义视图的简单操作栏 但我得到以下结果 为了演示 我创建了一个带有黄色背景颜色的简单 xml 它应该占据整个宽度 这是 XML
  • Android TextureView 和硬件加速

    我正在尝试实现上所示的示例这一页 http developer android com reference android view TextureView html 我已经在运行 android 4 及以上版本的三种不同设备上进行了尝试
  • React Native HTTPS Api 调用在 IOS 中有效,但在 Android 中无效

    所以基本上我所做的就是简单地对启用了 HTTPS 的 UAT 服务器进行简单的 Axios 调用 我已经在 IOS 中测试了整个应用程序 API 调用工作正常 但一旦我在 Android 中测试了相同的应用程序 在真正的 Android 设
  • 如何解决 greenDAO 在执行 InsertOrReplace 时“不存在这样的表错误”?

    我正在使用 greenDAO 并且已成功生成所有必需的类和实体 并且我可以看到我的表已创建 但是在要替换的行上放置断点后 我收到一条错误消息 告诉我 不存在这样的表错误 try appTimeUsageDao insertOrReplace
  • Android View Canvas onDraw 未执行

    我目前正在开发一个自定义视图 它在画布上绘制一些图块 这些图块是从多个文件加载的 并将在需要时加载 它们将由 AsyncTask 加载 如果它们已经加载 它们只会被绘制在画布上 这工作正常 如果加载了这些图片 AsyncTask 就会触发v

随机推荐