Как удалить всплывающий текст Android SearchView при поиске?

Я реализовал панель действий SearchView , она работает нормально, но внизу экрана отображается всплывающее окно с плавающим текстом. Смотрите скриншот:

короткий экран

Java-класс ListView:

@Override
    public boolean onQueryTextChange(String newText) {

        if (TextUtils.isEmpty(newText)) {
            mListView.clearTextFilter();
        } else {

            // EventAdapterView ca = (EventAdapterView)mListView.getAdapter();
            // ca.getFilter().filter(newText.toString());

            // Filter lFilter = mDataAdapter.getFilter();
            // lFilter.filter("");
            // following line was causing the ugly popup window.
            mListView.setFilterText(newText.toString());

            // EventAdapterView ca = (EventAdapterView)mListView.getAdapter();
            // ca.getFilter().filter(newText.toString());

        }

        return true;
    }

    @Override
    public boolean onQueryTextSubmit(String query) {
        return true;
    }

Класс адаптера

@Override
    public Filter getFilter() {
        /**
         * A filter object which will filter message key
         * */
        Filter filter = new Filter() {

            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint,
                    FilterResults results) {

                mEventUtil = (List<EventUtil>) results.values; // has the
                                                                // filtered
                                                                // values
                notifyDataSetChanged(); // notifies the data with new filtered
                                        // values. Only filtered values will be
                                        // shown on the list
            }

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {

                FilterResults results = new FilterResults(); // Holds the
                                                                // results of a
                                                                // filtering
                                                                // operation for
                                                                // publishing

                List<EventUtil> FilteredArrList = new ArrayList<EventUtil>();

                if (mOriginalValues == null) {
                    mOriginalValues = new ArrayList<EventUtil>(mEventUtil); // mOriginalValues

                }

                if (mListItem == null) {
                    mListItem = new ArrayList<String>();
                    for (EventUtil message : mOriginalValues) {
                        mListItem.add(message.getEvent_Title());
                    }
                }

                /**
                 * 
                 * If constraint(CharSequence that is received) is null returns
                 * the mOriginalValues(Original) values else does the Filtering
                 * and returns FilteredArrList(Filtered)
                 * 
                 **/

                if (constraint == null || constraint.length() == 0) {

                    /*
                     * CONTRACT FOR IMPLEMENTING FILTER : set the Original
                     * values to result which will be returned for publishing
                     */
                    results.count = mOriginalValues.size();
                    results.values = mOriginalValues;
                } else {
                    /* Do the filtering */
                    constraint = constraint.toString().toLowerCase();

                    for (int i = 0; i < mListItem.size(); i++) {
                        String data = mListItem.get(i);
                        if (data.toLowerCase().contains(constraint.toString())) {
                            FilteredArrList.add(mOriginalValues.get(i));
                        }
                    }

                    // set the Filtered result to return
                    results.count = FilteredArrList.size();
                    results.values = FilteredArrList;
                }
                return results;
            }
        };
        return filter;
    }

Как я могу удалить этот плавающий TextView?


person venu    schedule 29.11.2013    source источник
comment
внизу, где отображается текст, это любой вид   -  person Shakeeb Ayaz    schedule 29.11.2013
comment
как его удалить, можно удалить   -  person venu    schedule 29.11.2013
comment
нет, это текстовая метка   -  person venu    schedule 29.11.2013
comment
Вы можете получить полный исходный код в примерах Android APIDemo --> Представления --> Представление поиска --> Пример фильтра   -  person venu    schedule 29.11.2013
comment
Попробуйте переопределить onDisplayHint в ListView и не вызывать super inmpementation.   -  person Leonidos    schedule 02.12.2013
comment
где я могу использовать onDisplayHint в классе активности или адаптера   -  person venu    schedule 02.12.2013


Ответы (2)


Попробуй это

сначала отключите TextFilterEnabled на своем ListView

yourListView.setTextFilterEnabled(false);

и отфильтруйте ваши данные следующим образом:

android.widget.Filter filter = yourListAdapter.getFilter();


@Override
public boolean onQueryTextChange(String newText) {
    // TODO Auto-generated method stub
    filter.filter(newText);
    return true;
}

вот и все, и всплывающее окно поиска исчезло как шарм

person AITAALI_ABDERRAHMANE    schedule 04.12.2013
comment
тот же код, который я пробовал, но разница в том, что вы объявляете объект фильтра вне метода, но я объявил внутри метода, я изменил его, теперь он отлично работает .... в любом случае Спасибо @AT_AB - person venu; 06.12.2013

Если вы используете CursorLoader, вам следует сохранить поисковый запрос в переменная-член для последующего использования вместо использования фильтра адаптера:

сказать,

private String mSearchQuery;

а потом изменить создание загрузчика для работы с поисковым запросом

@Override
public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
    showProgress(true);
    if (TextUtils.isEmpty(mSearchQuery)) {
        return new CursorLoader(
                mActivity,
                CONTENT_URI,
                PROJECTION,
                DEFAULT_SELECTION,
                null,
                SORT_ORDER
        );
    }
    mSearchQuery = "%" + mSearchQuery + "%";
    return new CursorLoader(
            mActivity,
            CONTENT_URI,
            PROJECTION,
            // add the filtering criteria to the default.
            DEFAULT_SELECTION + " AND " + COLUMN_A + " LIKE ?",
            new String[]{mSearchQuery},
            SORT_ORDER
    );
}

и, наконец, убедитесь, что вы перезагрузили загрузчик

@Override
public boolean onQueryTextChange(String newText) {
    mSearchQuery = newText;
    // calls the above method
    mActivity.getSupportLoaderManager().
            restartLoader(0, null, this);
    return true;
}
person Avinash R    schedule 15.05.2014