我想将自定义搜索 View 框放在其他 View 上,但不在操作栏上。
与 Google map 应用程序中的搜索相同,左上角有“搜索”对话框。
当输入1个字符时更新数组列表结果。
我不知道自定义和创建SearchView的onQueryTextSubmit、onQueryTextChange方法。
如何编码。
谢谢。
最佳答案
这个概念与您在 ActionBar 中所做的相同。您需要将事件关联到 EditText,如下所示:
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
if (myAdapter != null) {
myAdapter.getFilter().filter(charSequence);
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
在适配器中,您可以实现过滤数据的逻辑。为此,您可以实现 Filterable 类。尝试这样的事情:
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
List<Object> filteredResult = getFilteredResults(charSequence);
FilterResults results = new FilterResults();
results.values = filteredResult;
results.count = filteredResult.size();
return results;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
listaFiltrada = (ArrayList<Documento>) filterResults.values;
MyAdapter.this.notifyDataSetChanged();
}
private ArrayList<Object> getFilteredResults(CharSequence constraint){
if (constraint.length() == 0){
return listaDocumentos;
}
ArrayList<Object> listResult = new ArrayList<Object>();
for (Object obj : listaTotal){
if (condition){
listResult.add(obj);
}
}
return listResult;
}
};
}
希望对你有帮助!! :)
关于Android Searchview 不在操作栏中在其他 View 上创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26881352/