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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
#1

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

10.10.2014, 12:42. Просмотров 527. Ответов 4
Метки нет (Все метки)

Недавно подключил 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):

Можно ли менять цвет шрифта в TextBox лишь в определённых фрагментах текста - Visual Basic .NET
Доброго времени суток. Меня интересует вопрос - можно ли менять цвет шрифта в TextBox лишь в определённых фрагментах текста? Я знаю про...

Рисовать в С++ можно? - C++
Недавно начал изучать С++, с помощью книжки "для чайников". Использую компилятор Dev c++ Есть опыт программирования на QBASIC. Вобщем...

Можно ли рисовать мышью в консоли? - C++ Builder
Если можно,то приведите пример, пожалуйста?

Подскажите чем можно рисовать дерево? - Visual Basic
нужно нарисовать что то типа диаграммы ну например в верху директор потом стрелками починенные и т.д. Может можно как то заюзать Ms chart...

Можно ли средствами OpenGL рисовать на канве? - C++ Builder
Всем доброго времени суток. Можно ли средствами OpenGL рисовать скажем на конве формы? Если можно то как? Добавлено через 6 часов...

Можно ли рисовать в окне нажатием кнопки? - C++
Попытался осуществить таким образом: case WM_COMMAND: { switch(LOWORD(wParam)) { case...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 403
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
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
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
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 403
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
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
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.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2014, 10:05
Привет! Вот еще темы с ответами:

В какой программе можно рисовать трехмерные схемы? - Электроника
Подскажите пожалуйста в какой программе нарисована эта схема?

Можно ли рисовать логические символы в текстовом поле? - Алгоритмы
какие вообще применяют варианты при надобности этого? инверсия, сложение ну и так далее?

Класс с помощью которого можно рисовать прямоугольники - Java
Есть класс с помощью которого можно рисовать прямоугольники, нужно сделать так что-бы в этих прямоугольниках был текст Здесь сделано...

По какому событию можно начинать рисовать на TCanvas? - Delphi
Всем доброго времени суток. Помогите, пожалуйста, разобраться со следующим вопросом. Есть у меня форма и TPaintBox на ней. Мне...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.10.2014, 10:05
Ответ Создать тему
Опции темы

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