我想在我的應用中實現搜索,但我不想使用單獨的活動來顯示我的搜索結果。相反,我只想使用顯示在SearchView
下的建議列表。使用SearchView進行自定義搜索
我可以在SearchView
上使用setOnQueryTextListener
,監聽輸入並搜索結果。但是,如何將這些結果添加到SearchView
以下的列表中?假設我在List<String>
中搜索。
我想在我的應用中實現搜索,但我不想使用單獨的活動來顯示我的搜索結果。相反,我只想使用顯示在SearchView
下的建議列表。使用SearchView進行自定義搜索
我可以在SearchView
上使用setOnQueryTextListener
,監聽輸入並搜索結果。但是,如何將這些結果添加到SearchView
以下的列表中?假設我在List<String>
中搜索。
你需要創建的是一個Content Provider。 通過這種方式,您可以將自定義結果添加到SearchView,並在用戶輸入內容時向其添加自動完成功能。
如果我沒有記錯的話,在我的一個項目中,我做了類似的事情,而且沒有太長時間。
我認爲這可能是有益的:Turn AutoCompleteTextView into a SearchView in ActionBar instead
而且也是這樣:SearchManager - adding custom suggestions
希望這有助於。
N.
是否可以在活動的同一個操作欄中添加兩個搜索小部件? –
我以一個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。
我希望這能以某種方式幫助你。
你能否提供一個示例代碼片段,就像你如何實現它一樣? – Anirudh