android - скрыть переработчик, если поиск не сделан - PullRequest
0 голосов
/ 12 сентября 2018

Я использую Searchview для фильтрации записей Firebase, отображаемых в Recyclerview.Я хочу, чтобы окно Recyclerview было пропущено, когда поиск не выполнен, который работает нормально, пока я не вернусь от найденного элемента к основному действию.Список повторного просмотра снова виден после завершения поиска.Я хочу, чтобы он всегда был скрыт всякий раз, когда поиск не производится.Вот соответствующий код:

    msearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {


        @Override
        public boolean onQueryTextSubmit(String mQuery) {


            /*while (query.length() > 4) {
                mRecyclerView.setVisibility(View.VISIBLE);
            } */

            if (!(mQuery == null || mQuery.trim().isEmpty())) {
                mRecyclerView.setVisibility(View.VISIBLE);
            }

            else {
                mRecyclerView.setVisibility(View.GONE);

            }

            firebaseSearch(mQuery);

            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {

            //filter as typed
            firebaseSearch(newText);
            return true;
        }
    });

    return super.onCreateOptionsMenu(menu);
}

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Давайте представим, что у вас есть 2 действия: A и B.

После того, как вы щелкнете по элементу в действии A, вы перейдете к действию B, но на этот раз активность A не будет полностью разрушена.Таким образом, состояние ввода текста и recylcerView останутся.После того, как вы вернетесь от действия B к действию A, вам лучше выполнить следующее действие, чтобы очистить представление поиска:

msearchView.setQuery("",false);
msearchView.setIconified(true);

Так как searchView очищен, onQueryTextChange () будет выполнен.Вы можете проверить состояние здесь.

0 голосов
/ 12 сентября 2018

Несколько вещей для рассмотрения, я думаю, что просто проверка query != null не всегда может быть правильной.Это может быть пустым или теоретически пустым.Лично я бы использовал что-то вроде:

if (query == null || query.trim().isEmpty()) {
    // No query made
}

Далее, возможно, я не совсем понял, я полагаю, у вас есть действие А, где пользователь ищет.Как только они ищут, вы показываете переработчик.Затем они нажимают на элемент, и вы переходите к занятию B. Когда пользователь возвращается к A, список все еще полон.Если это правильно, вы должны помнить, что A не обязательно уничтожается, когда B виден сверху.Если у вашего телефона недостаточно памяти, операционная система может позвонить onDestroy и восстановить его, когда вы вернетесь назад.В любом случае ... простое решение здесь - скрыть RecycleView при переходе к B.

...