Android ActionbarSherlock SearchView

Rav*_*r11 19 android actionbarsherlock

我们可以使用ActionbarSherlock在Android 2.2中实现SeachView.

我使用以下代码,它在3.0中正常工作但在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;
     }
Run Code Online (Sandbox Code Playgroud)

我在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)
Run Code Online (Sandbox Code Playgroud)

ina*_*ruk 12

一个小小的更新:

  • 杰克沃顿目前正在dev分支机构的ActionBarSherlock 4.2.0上工作,并在SearchView那里向后移植.它的功能有限(最值得注意的是 - 不支持SearchableInfo).但他正致力于扩展功能.

  • 我不知道Jake Wharton对backporting的意图,SearchView并且做了我的backport版本(可以在github上找到:abs-search-view).我的版本也不支持SearchableInfo.

这两种实现方式大致相同.他们使用了大部分来自AOSP的相同代码.但是有一些显着的差异.

  • ActionBarSherlock backport支持建议适配器
  • ActionBarSherlock backport不会回退到SearchView具有API 11及更高版本的系统上的原始实现(即它是在所有平台上具有优缺点的相同代码).
  • 我的版本不支持建议适配器(虽然可以添加).
  • 我的版本在API 11(使用后端版本的代码)之前的系统上具有有限的功能,并且在API 11及更高版本上SearchView,所有功能的后备都支持原始本机版本,并且所有功能都以文档中描述的方式得到支持.

就个人而言,我建议坚持使用ActionBarSherlock版本(这样更容易).只有在需要API 11及更高版本的系统上需要这种全功能行为时才使用我的库.

  • 截至06-12-2012,SearchView在ABS的Ver 4.2中实现. (3认同)

son*_*ida 12

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

    <item
    android:id="@+id/search"
    android:actionLayout="@layout/layout_menu_search"
    android:actionViewClass="com.actionbarsherlock.widget.SearchView"
    android:icon="@drawable/ic_menu_search"
    android:orderInCategory="1"
    android:showAsAction="always|collapseActionView"/>

</menu>
Run Code Online (Sandbox Code Playgroud)


Coo*_*ter 11

不幸的是,根据我的阅读和尝试,ActionBarSherlock不支持SearchView小部件.

Android将在未来发布一个支持此功能的向后兼容软件包,但谁知道什么时候会这样做.

从男人自己看到这个链接:https: //github.com/JakeWharton/ActionBarSherlock/issues/70

  • `SearchView`是一个非常高级的小部件.它的后退不会是微不足道的.这可能会在将来发生,因为链接问题说明,但这不是我的优先事项.虽然是某人的贡献,但这将是完美的... (6认同)
  • SearchView在4.2版本的ABS中实现. (5认同)