2012-01-23 102 views
19

我們能否使用ActionbarSherlock Android 2.2中實現SeachView。的Android ActionbarSherlock搜索查看

我使用下面的代碼,它工作正常在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; 
    } 

我收到以下錯誤在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) 
+0

請看看[這個答案](http://stackoverflow.com/questions/14991980/actionbarsherlock-searchview-setonquerytextlistener/15050518#15050518)。我沒有使用低於3.0的版本進行測試。 –

回答

11

不工作不幸的是,從我已閱讀並嘗試過,ActionBarSherlock不支持SearchView小部件。

的Android設定在未來支持該釋放向後兼容包,但誰知道什麼時候,這將是。

見從他本人此鏈接: https://github.com/JakeWharton/ActionBarSherlock/issues/70

+0

另一種方法是根據操作系統版本來查找您的搜索視圖小部件。爲蜂窩前設備創建您自己的搜索視圖窗口小部件,並使用API​​-11 +的默認設置。 – Cookster

+6

'SearchView'是一個非常先進的小部件。它的回溯不是微不足道的。這可能會在未來發生,因爲相關問題說,但它不是我的優先事項。雖然... –

+5

SearchView是在4.2版本的ABS中實現的。 –

13

一個小更新:

  • 傑克沃頓商學院目前正在ActionBarSherlock 4.2.0在dev分支,具有SearchView回遷那裏。它具有有限的功能(最顯着的 - 不支持SearchableInfo)。但他正在努力擴展功能。

  • 我不知道傑克沃頓商學院的意圖上向後移植SearchView,做我的版本後向移植的(:abs-search-view可以在GitHub上找到)。我的版本也不支持SearchableInfo

這兩個實現基本上以相同的方式完成。他們使用來自AOSP的大部分相同的代碼。但是有一些顯着的差異。

  • ActionBarSherlock反向移植支持建議適配器
  • ActionBarSherlock向移植用API 11及以上的原始SearchView實現不回退到上系統(即,它是相同的代碼在所有平臺的優點和缺點)。
  • 我的版本不支持的建議適配器(它雖然可以增加)。
  • 我的版本對API 11(其中使用的代碼後向移植版本)之前系統有限的功能和API 11和更高的一切回退給原SearchView原生版本和所有的功能都支持它們在文檔中描述的方式。

就我個人而言,我建議堅持使用ActionBarSherlock版本(這只是簡單的方法)。只有在API 11及以上的系統上需要這種完全功能的行爲時才使用我的庫。

+1

SearchableInfo仍然不受支持? IE瀏覽器能不能按照「配置搜索小部件」下的這個教程http://developer.android.com/guide/topics/search/search-dialog.html 謝謝 –

+3

截至日期06-12-2012,SearchView在ABS的Ver 4.2中實施。 –

+0

很高興知道!感謝您的更新。 – Cookster

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>