如何禁用搜索栏类型提示

时间:2013-04-29 14:10:26

标签: android filter android-edittext

我有一些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 ) {}
});

但默认情况下它会在提示中显示类型:

enter image description here

如何禁用提示?

2 个答案:

答案 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 ) {}
});

此外,为了更好的用户体验,请考虑使用SearchViewonQueryTextChange代替EditTextonTextChanged

答案 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) {

        }
    };