我有一些editText搜索过滤器的代码
EditText searchView = (EditText) findViewById(R.id.search_view_edit);
searchView.setVisibility(View.VISIBLE);
`list.setTextFilterEnabled(true);`
searchView.setHint( getResources().getString( R.string.search_friend_hint ) );
searchView.addTextChangedListener( new TextWatcher() {
@Override
public void onTextChanged( CharSequence s, int start,int before, int count ) {
Log.d("abc123", "onTextChanged " + s.toString() );
if (TextUtils.isEmpty( s )) {
list.clearTextFilter();
} else {
list.setFilterText( s.toString() );
}
}
@Override
public void beforeTextChanged( CharSequence s, int start, int count, int after ) {}
@Override
public void afterTextChanged( Editable s ) {}
});
但默认情况下它会在提示中显示类型:
如何禁用提示?
答案 0 :(得分:0)
EditText
不会显示提示,ListView
会显示结果。如this answer所示,要禁用此工具提示/ Toast,请避免setTextFilterEnabled(true)
和setFilterText
。相反,直接使用getAdapter().getFilter().filter
:
EditText searchView = (EditText) findViewById(R.id.search_view_edit);
searchView.setVisibility(View.VISIBLE);
//DON'T list.setTextFilterEnabled(true);
searchView.setHint( getResources().getString( R.string.search_friend_hint ) );
searchView.addTextChangedListener( new TextWatcher() {
@Override
public void onTextChanged( CharSequence s, int start,int before, int count ) {
Log.d("abc123", "onTextChanged " + s.toString() );
list.getAdapter().getFilter().filter(s);
}
@Override
public void beforeTextChanged( CharSequence s, int start, int count, int after ) {}
@Override
public void afterTextChanged( Editable s ) {}
});
此外,为了更好的用户体验,请考虑使用SearchView
和onQueryTextChange
代替EditText
和onTextChanged
,
答案 1 :(得分:0)
在 hlidka的答案需要修正和分类转换为Filterable:
TextWatcher tw = new TextWatcher(){
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
final LinearLayout sf=(LinearLayout) findViewById(R.id.searchFilter);
final LinearLayout sr=(LinearLayout) findViewById(R.id.searchResultLayout);
if (TextUtils.isEmpty(s)) {
mListView.clearTextFilter();
} else {
((Filterable)mListView.getAdapter()).getFilter().filter(s);
//following line was causing the ugly popup window.
//mListView.setFilterText(s.toString());
}
officeSearchAdapter.notifyDataSetChanged();
}
@Override
public void afterTextChanged(Editable s) {
}
};