我已准备好SearchView
,这是我在包含SearchView
的页面的java文件中使用的代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(
new ComponentName(getApplicationContext(), SearchableActivity.class)));
return true;
}
我的目标是让SearchView
搜索一个充满TextView
s的网站。每个TextView
都包含一个单词。是否可以让SearchView
找到包含我刚输入的单词的TextView
?如果是这样,怎么样?如果没有,我怎么能以另一种方式实现呢?
亲切的问候, 儒略
答案 0 :(得分:2)
SearchView
根本不进行任何搜索,它是一个简单的小部件,用于输入关键字,显示最近使用的关键字等。您应该实现“搜索模型”以查找内容,并显示它你想要的地方。
答案 1 :(得分:1)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.menu_search));
SearchManager searchManager = (SearchManager) getSystemService(Activity.SEARCH_SERVICE);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
// Setting up custom search button icon
int searchImgId = android.support.v7.appcompat.R.id.search_button; // I used the explicit layout ID of searchview's ImageView
ImageView v = (ImageView) searchView.findViewById(searchImgId);
v.setImageResource(R.drawable.ic_search_black);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
// Do operation
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
return true;
}
menu_search.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:appcompat="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_search"
style="@android:style/Widget.ActionButton"
android:icon="@drawable/ic_search_black"
android:title="@string/search"
appcompat:actionViewClass="android.support.v7.widget.SearchView"
appcompat:showAsAction="always" />
</menu>
答案 2 :(得分:1)
我想你要做的是搜索布局中定义的TextViews中的文本。 我假设文本源是文件&#34; Data.java中的String Array / ArrayList(TextViewData)。
你可以尝试一下:
1)制作活动/片段implement SearchView.OnQueryTextListener
2)创建一个空的ArrayList来存储搜索条目结果。
private ArrayList<Data> mSearchItems
3)将此行添加到初始化SearchView的代码
searchView.setOnQueryTextListener(this);
4)覆盖以下方法:
i)要求提交的方法:
@Override
public boolean onQueryTextSubmit(String query) {
//Call a user defined mathod to handle the search.
handleSearch(query, Data.TextViewData)
}
ii)要求更改搜索框中文本的方法
@Override
public boolean onQueryTextChange(String query) {
handleSearch(query, Data.TextViewData)
}
5)
private void handleSearch(String Query, ArrayList<Data> queryList){
mSearchItems.clear();
for(Data data : queryList){
if(data.textviewone.toLowerCase().contains(Query.toLowerCase()) ||
data.textviewtwo.toLowerCase().contains(Query.toLowerCase()))
mSearchItems.add(data);
//You can then swap the recycler view (if being used) or hide other text views and display only the one being searched for (in case of a match)
}
}