2012-10-18 230 views
4

我想在我的應用中實現搜索,但我不想使用單獨的活動來顯示我的搜索結果。相反,我只想使用顯示在SearchView下的建議列表。使用SearchView進行自定義搜索

我可以在SearchView上使用setOnQueryTextListener,監聽輸入並搜索結果。但是,如何將這些結果添加到SearchView以下的列表中?假設我在List<String>中搜索。

+0

你能否提供一個示例代碼片段,就像你如何實現它一樣? – Anirudh

回答

2

你需要創建的是一個Content Provider。 通過這種方式,您可以將自定義結果添加到SearchView,並在用戶輸入內容時向其添加自動完成功能。

如果我沒有記錯的話,在我的一個項目中,我做了類似的事情,而且沒有太長時間。

我認爲這可能是有益的:Turn AutoCompleteTextView into a SearchView in ActionBar instead

而且也是這樣:SearchManager - adding custom suggestions

希望這有助於。

N.

+0

是否可以在活動的同一個操作欄中添加兩個搜索小部件? –

1

我以一個EditText這需要搜索字符串實現的搜索我的應用程序。
而在這個EditText下面我有我想要執行搜索的ListView。

<EditText 
    android:id="@+id/searchInput" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/input_patch" 
    android:gravity="center_vertical" 
    android:hint="@string/search_text" 
    android:lines="1" 
    android:textColor="@android:color/white" 
    android:textSize="16sp" > 
</EditText> 
<ListView 
    android:id="@+id/appsList" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_below="@+id/searchInput" 
    android:cacheColorHint="#00000000" > 
</ListView> 

搜索EditText下面的列表根據在EditText中輸入的搜索文本而改變。

etSearch = (EditText) findViewById(R.id.searchInput); 
etSearch.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     searchList(); 
    } 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 
    } 
    @Override 
    public void afterTextChanged(Editable s) { 
    } 
}); 

功能searchList()做實際的搜索

private void searchList() { 
    String s = etSearch.getText().toString(); 
    int textlength = s.length(); 
    String sApp; 
    ArrayList<String> appsListSort = new ArrayList<String>(); 
    int appSize = list.size(); 
    for (int i = 0; i < appSize; i++) { 
     sApp = list.get(i); 
     if (textlength <= sApp.length()) { 
      if (s.equalsIgnoreCase((String) sApp.subSequence(0, textlength))) { 
       appsListSort.add(list.get(i)); 
      } 
     } 
    } 
    list.clear(); 
    for (int j = 0; j < appsListSort.size(); j++) { 
     list.add(appsListSort.get(j)); 
    } 
    adapter.notifyDataSetChanged(); 
} 

這裏list是顯示在ListView和adapter是ListView的適配器的ArrayList。
我希望這能以某種方式幫助你。

+0

我想使用'SearchWidget'和那是它自己的建議列表。 – nhaarman

+0

它在sApp = list.get(i)處得到錯誤;請幫我解決這個問題 –

+0

@DeepakGupta請解釋一下你的錯誤嗎? – Zeba

相關問題