Форум программистов, компьютерный форум CyberForum.ru

Можно ли рисовать лупу не во всех фрагментах? - Android

Войти
Регистрация
Восстановить пароль
 
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
10.10.2014, 12:42     Можно ли рисовать лупу не во всех фрагментах? #1
Недавно подключил ActionBar с поиском, использовал такой тьюториал: http://www.androidhive.info/2013/11/...th-action-bar/. Всё нормально, приложение рисует лупу наверху, можно поискать какой-нибудь текст и вывести соответствующие строчки в ListView, например.
С горем пополам смог одолеть работу с фрагментами так, чтобы поиск делался в некоторых фрагментах (а не в activity). Большинство сайтов об этом не пишет, пришлось всё делать самому.
Но проблема осталась - лупа рисуется на всех экранах. Хочется сделать так, чтобы она рисовалась только в тех фрагментах, где поиск нужен, а в остальных бы она исчезала.
Пытался скрывать лупу во всём приложении, а рисовать её только в нужных фрагментах, например, так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.main_invitro, menu);
        menu.clear();
        // Associate searchable configuration with the SearchView
        SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
        SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));
        searchView.clearFocus();
 
        super.onCreateOptionsMenu(menu,inflater);
    }
, но появляются разные баги. То 2 лупы появляются, то лупы нет, а текст вверху ввести можно.
Ребят, подскажите, кто-нибудь делал поиск во фрагментах? Можно ли скрывать лупу в некоторых фрагментах?
Если нет, то каким способом лучше делать поиск (может быть, придётся использовать стандартные текстовые поля поверх ListView, чего не очень хочется).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2014, 12:42     Можно ли рисовать лупу не во всех фрагментах?
Посмотрите здесь:

Как рисовать на кнопках Android
Android Как рисовать текст на Canvas во View?
Сложно ли рисовать графику на Джава для Андроида? Android
Android Рисовать поверх всего
Android Как рисовать графики на Android?
Android Что использовать во фрагментах вместо getIntent() ?
Android Запутался в фрагментах и транзакциях с GoogleMaps?
Android Одновременно и рисовать и отслеживать координаты нажатия
View во фрагментах Android
Android Где можно посмотреть список всех существующих библиотек для AS? (кроме GitHub)
Android NavigationView на фрагментах
Как добавить динамически в ToolBar виджет SearchView в нужных фрагментах Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gabberr
 Аватар для Gabberr
101 / 101 / 17
Регистрация: 13.10.2009
Сообщений: 402
10.10.2014, 13:59     Можно ли рисовать лупу не во всех фрагментах? #2
можно управлять видимостью так
Java
1
2
3
4
5
6
7
boolean isVisible;
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    menu.findItem(R.id.search).setVisible(isVisible);
    return true;
}
для обновления состояния вызывайте
Java
1
invalidateOptionsMenu()
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
10.10.2014, 17:54  [ТС]     Можно ли рисовать лупу не во всех фрагментах? #3
Gabberr, да вы просто маг, уважаемый!
Сделал по вашему рецепту. То что доктор прописал.
На stackoverflow пока так и не ответили.

Многочисленные статьи содержат много забавных недоработок. Будет время - сделаю тьюториалы по поиску во фрагментах, фильтрации в ListView.

Добавлено через 3 часа 6 минут
Поскольку при переключении между фрагментами поиск то нужен, то нет, соответственно, лупа может то появляться, то исчезать, а также требуется обрабатывать вводимый вверху текст, чуть переписал код:
Java
1
2
3
4
5
6
7
8
9
10
11
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        super.onPrepareOptionsMenu(menu);
        // Скроем лупу по необходимости.
        if (magnifierVisible)
            menu.findItem(R.id.action_search).setVisible(true);
        else
            menu.clear(); // Очищает поле ввода в поиске и убирает оттуда курсор.
 
        return true;
    }
Кроме того, в других activity, в которых используется public boolean onCreateOptionsMenu(Menu menu), надо не забыть прописать
Java
1
menu.findItem(R.id.action_search).setVisible(false);
если в activity поиск не используется.
Gabberr, хотел у вас спросить. 3 дня копался, но так и не нашёл ответа, поэтому сделал очистку поиска после переключения фрагмента.
Можно ли устанавливать поисковую фразу? Например, запомнил введённую фразу, переключился в другой фрагмент, вернулся обратно, а в поиске уже введена старая фраза.
Пробовал через searchView.setQuery("dfdsfg", false);, но не удаётся. Там так и остаётся пусто.
Gabberr
 Аватар для Gabberr
101 / 101 / 17
Регистрация: 13.10.2009
Сообщений: 402
10.10.2014, 18:14     Можно ли рисовать лупу не во всех фрагментах? #4
По идее метод setQuery должен работать...может так:
Java
1
2
3
4
5
6
7
8
9
searchView.post(new Runnable() {
 
            @Override
            public void run() {
                // Important! Make sure searchView has been initialized
                // and referenced to the correct (current) SearchView
                searchView.setQuery(query, false);
            }
        };
ну и чтоб текст сетился думаю нужно, чтоб searchView был в состоянии expanded
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
13.10.2014, 10:05  [ТС]     Можно ли рисовать лупу не во всех фрагментах? #5
Gabberr, большое спасибо! Однажды видел такое решение, но подумал, что оно вряд ли заработает, и не стал пробовать. Попробовал сейчас - да, работает, когда фокус передан в searchView (или мне так показалось).
Попробовал другое решение с той же страницы, вроде, запустилось:
Java
1
2
3
        MenuItem searchItem = menu.findItem(R.id.action_search);
        MenuItemCompat.expandActionView(searchItem);
        searchView.setQuery("mKeyword", true);
Спасибо за упоминание об expand.
Yandex
Объявления
13.10.2014, 10:05     Можно ли рисовать лупу не во всех фрагментах?
Ответ Создать тему
Опции темы

Текущее время: 06:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru