2012-04-19 68 views
13

我想在API 8應用程序中使用SearchViewCompatActionBarSherlockandroid.support.v4.widget.SearchViewCompat示例?

public boolean onCreateOptionsMenu(Menu menu) { 
    MenuItem item = menu.add("Search") 
     .setIcon(isLight ? R.drawable.ic_search_inverse : R.drawable.ic_search) 
     .setActionView(R.layout.collapsible_edittext); 
    item.setShowAsAction(
     MenuItem.SHOW_AS_ACTION_ALWAYS | 
     MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); 

    // To use SearchViewCompat, I need to add it to the Menu item as well: 
    View searchView = SearchViewCompat.newSearchView(this); 
    // ... 
    SearchViewCompat.setOnQueryTextListener(...); 
    // ... 
    item.setActionView(searchView); 

請注意,頂部和底部的代碼需要調用setActionView()。這是否意味着無法進行搜索?

+1

不要問代碼,您可以添加,到目前爲止,你的問題,你已經得到了代碼。也許人們可以幫助你解決你的問題。 – THelper 2012-04-19 07:47:52

+1

謝謝THelper。還看起來像我的本地文件已過時,我找到了一個特定的開發人員主題:http://developer.android.com/training/search/backward-compat.html – woodglue 2012-04-20 05:22:13

回答

2

實際問題是什麼?由於SearchView小部件不存在,所以SearchViewCompat將返回用於預HC設備的null。這意味着您將不得不提供您自己的模仿HC SearchView的自定義操作視圖。

您也可以將Android源代碼中的SearchView組件返回並使用它。

否則,您可以使用Android已有的搜索界面,在這種情況下,您使用操作視圖執行搜索的HC +設備執行搜索,但在Froyo和Gingerbread設備上,用戶單擊搜索圖標和搜索欄動畫從一開始。

希望這會有所幫助。

+0

你可以指向一個實現,如果有的話? – 2012-12-04 22:08:48

6

如果您使用的是ActionBarSherlock庫版本4.2,可以更換API 11搜索查看的Widget與ActionBarSherlock搜索查看窗口小部件,使其向後兼容:

search.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/menu_search" 
     android:icon="@drawable/ic_action_search" 
     android:title="@string/description_search" 
     android:orderInCategory="0" 
     android:actionViewClass="com.actionbarsherlock.widget.SearchView" 
     android:showAsAction="ifRoom|collapseActionView" /> 
</menu> 

活動分類

//IMPORTANT!!! 
import com.actionbarsherlock.widget.SearchView; 

.. 。

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 
    getSupportMenuInflater().inflate(R.menu.search, menu); 
    setupSearchMenuItem(menu); 
    return true; 
} 

private void setupSearchMenuItem(Menu menu) { 
    MenuItem searchItem = menu.findItem(R.id.menu_search); 
    if (searchItem != null) { 
     SearchView searchView = (SearchView) searchItem.getActionView(); 
     if (searchView != null) { 
      SearchManager searchManager = 
       (SearchManager) getSystemService(SEARCH_SERVICE); 
      searchView.setSearchableInfo(
       searchManager.getSearchableInfo(getComponentName())); 
      } 
     } 
    } 
} 
2

在您的活動的一些點:

public class HomeActivity extends SherlockFragmentActivity implements 
    SearchView.OnQueryTextListener { 

// ...  
SearchView searchView = (com.actionbarsherlock.widget.SearchView) 
    actionBarCustom.findViewById(R.id.search); 
SearchManager sm = (SearchManager)getSystemService(SEARCH_SERVICE); 
searchView.setSearchableInfo(sm.getSearchableInfo(getComponentName())); 
searchView.setSubmitButtonEnabled(true); 
searchView.setOnQueryTextListener(this); 

,然後篩選列表適配器:

@Override 
public boolean onQueryTextSubmit(String query) { 
    return true; 
} 

@Override 
public boolean onQueryTextChange(String newText) { 
    mAdapter.getFilter().filter(newText.trim()); 
    return false; 
} 

這樣,你的列表適配器必須實現過濾。

0

最好使用MenuItemCompat,我認爲這是有幫助的,你

getMenuInflater().inflate(R.menu.main, menu); 
    MenuItem searchItem = menu.findItem(R.id.search); 
    SearchManager searchManager =(SearchManager)getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = (SearchView)MenuItemCompat.getActionView(searchItem); 
    SearchableInfo info = searchManager.getSearchableInfo(getComponentName()); 
    searchView.setSearchableInfo(info); 
相關問題