Android ActionbarSherlock SearchView

Ravikumar11 picture Ravikumar11 · Jan 23, 2012 · Viewed 19.1k times · Source

Can we implement SeachView in Android 2.2 using ActionbarSherlock.

I am using following code, it is working fine in 3.0 but not working in 2.2

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    //getMenuInflater().inflate(R.menu.main_menu, menu);
     MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
    // set up a listener for the refresh item


        SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
        final SearchView.OnQueryTextListener queryTextListener = new    SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextChange(String newText) {
                // Do something
                System.out.println("onQueryTextChange----------");
                return true;
            }
            @Override
            public boolean onQueryTextSubmit(String query) {
                // Do something
                System.out.println("onQueryTextSubmit----------");
                return true;
            }
        };
        searchView.setOnQueryTextListener(queryTextListener);

   return true;
     }

I am getting following error on 2.2

    at 01-23 17:31:53.230: W/MenuInflater(20214):   at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
01-23 17:31:53.230: W/MenuInflater(20214):  at com.actionbarsherlock.internal.view.menu.MenuInflaterImpl$MenuState.newInstance(MenuInflaterImpl.java:533)
01-23 17:31:53.230: W/MenuInflater(20214):  at com.actionbarsherlock.internal.view.menu.MenuInflaterImpl$MenuState.setItem(MenuInflaterImpl.java:497)
01-23 17:31:53.230: W/MenuInflater(20214):  at com.actionbarsherlock.internal.view.menu.MenuInflaterImpl$MenuState.addItem(MenuInflaterImpl.java:515)
01-23 17:31:53.230: W/MenuInflater(20214):  at com.actionbarsherlock.internal.view.menu.MenuInflaterImpl.parseMenu(MenuInflaterImpl.java:238)
01-23 17:31:53.230: W/MenuInflater(20214):  at com.actionbarsherlock.internal.view.menu.MenuInflaterImpl.inflate(MenuInflaterImpl.java:164)
01-23 17:31:53.230: W/MenuInflater(20214):  at com.actionbarsherlock.sample.styledactionbar.MainActivity.onCreateOptionsMenu(MainActivity.java:99)
01-23 17:31:53.230: W/MenuInflater(20214):  at android.support.v4.app.FragmentActivity.dispatchCreateOptionsMenu(FragmentActivity.java:601)
01-23 17:31:53.230: W/MenuInflater(20214):  at android.support.v4.app.FragmentActivity.invalidateOptionsMenu(FragmentActivity.java:706)

Answer

inazaruk picture inazaruk · Aug 5, 2012

A small update:

  • Jake Wharton is currently working on ActionBarSherlock 4.2.0 in dev branch and has SearchView backported there. It has limited functionality (most notable - no support for SearchableInfo). But he is working on expanding functionality.

  • I didn't know about Jake Wharton's intentions on backporting SearchView and did my version of backport (can be found on github: abs-search-view). My version also does not support SearchableInfo.

These two implementations were done in mostly the same way. They use much of the same code taken from AOSP. But there are some notable differences.

  • ActionBarSherlock backport supports suggestions adapter
  • ActionBarSherlock backport does not fallback on original SearchView implementation on systems with API 11 and up (i.e. it's the same code with pros and cons on all platforms).
  • My version does not support suggestions adapter (it can be added though).
  • My version has limited functionality on systems before API 11 (where backport version of code is used) and on API 11 and higher everything fallbacks to original native version of SearchView and all features are supported the way they are described in documentation.

Personally, I'd recommend sticking with ActionBarSherlock version (it's just easier that way). And use my library only if you need this fully functional behavior on systems with API 11 and up.