Android ActionBarSherlock-SearchView是否为空?

Android ActionBarSherlock-SearchView是否为空?,android,actionbarsherlock,classnotfoundexception,searchview,Android,Actionbarsherlock,Classnotfoundexception,Searchview,我将搜索功能添加到SherlockListActivity中的操作栏,但是,当我尝试实例化SearchView时,其始终为空: @Override public boolean onCreateOptionsMenu(Menu menu) { getSupportMenuInflater().inflate(R.menu.activity_main_menu, menu); SearchView searchView = (SearchView) menu.findItem(R.

我将搜索功能添加到SherlockListActivity中的操作栏,但是,当我尝试实例化SearchView时,其始终为空:

@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);
}
这是堆栈跟踪。在实例化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


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

我不太熟悉ActionBarSherlock SearchView类的用法,但我可以告诉你的是,如果你查看,他不会试图从菜单中获取SearchView,而是创建SearchView并将其设置到菜单中

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    //Used to put dark icons on light action bar
    boolean isLight = SampleList.THEME == R.style.Theme_Sherlock_Light;

    //Create the search view
    SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());
    searchView.setQueryHint("Search for countries…");
    searchView.setOnQueryTextListener(this);
    searchView.setOnSuggestionListener(this);

    if (mSuggestionsAdapter == null) {
        MatrixCursor cursor = new MatrixCursor(COLUMNS);
        cursor.addRow(new String[]{"1", "'Murica"});
        cursor.addRow(new String[]{"2", "Canada"});
        cursor.addRow(new String[]{"3", "Denmark"});
        mSuggestionsAdapter = new SuggestionsAdapter(getSupportActionBar().getThemedContext(), cursor);
    }

    searchView.setSuggestionsAdapter(mSuggestionsAdapter);

    menu.add("Search")
        .setIcon(isLight ? R.drawable.ic_search_inverse : R.drawable.abs__ic_search)
        .setActionView(searchView)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

    return true;
}

错误本身是由ActionBarSherlock库引起的,您可以在GitHub中找到问题:

这里的评论是我的解决方案:

转到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>

关于上述github问题,我已经解决了。(奇怪的修正,因为您刚刚删除了主题的基础。)

在哪个Android版本上运行,以及您将哪个主题设置为默认主题?我将target sdk设置为17,min sdk设置为8。但是我发现了错误:。在这里发表的评论是我的解决方案:所有这些似乎都是不必要的。。。我发现了错误:。此处发布的评论是我的解决方案:。谢谢你的回答,投赞成票:)
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)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    //Used to put dark icons on light action bar
    boolean isLight = SampleList.THEME == R.style.Theme_Sherlock_Light;

    //Create the search view
    SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());
    searchView.setQueryHint("Search for countries…");
    searchView.setOnQueryTextListener(this);
    searchView.setOnSuggestionListener(this);

    if (mSuggestionsAdapter == null) {
        MatrixCursor cursor = new MatrixCursor(COLUMNS);
        cursor.addRow(new String[]{"1", "'Murica"});
        cursor.addRow(new String[]{"2", "Canada"});
        cursor.addRow(new String[]{"3", "Denmark"});
        mSuggestionsAdapter = new SuggestionsAdapter(getSupportActionBar().getThemedContext(), cursor);
    }

    searchView.setSuggestionsAdapter(mSuggestionsAdapter);

    menu.add("Search")
        .setIcon(isLight ? R.drawable.ic_search_inverse : R.drawable.abs__ic_search)
        .setActionView(searchView)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

    return true;
}
<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"