Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,732
1

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

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

Недавно подключил ActionBar с поиском, использовал такой тьюториал: http://www.androidhive.info/2013/11/android-working-with-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, чего не очень хочется).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2014, 12:42
Ответы с готовыми решениями:

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

Рисовать в С++ можно?
Недавно начал изучать С++, с помощью книжки "для чайников". Использую...

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

Можно ли рисовать в окне нажатием кнопки?
Попытался осуществить таким образом: case WM_COMMAND: { ...

Подскажите чем можно рисовать дерево?
нужно нарисовать что то типа диаграммы ну например в верху директор потом...

4
Gabberr
103 / 103 / 19
Регистрация: 13.10.2009
Сообщений: 404
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()
1
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,732
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);, но не удаётся. Там так и остаётся пусто.
0
Gabberr
103 / 103 / 19
Регистрация: 13.10.2009
Сообщений: 404
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
1
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,732
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.
0
13.10.2014, 10:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2014, 10:05

Можно ли средствами OpenGL рисовать на канве?
Всем доброго времени суток. Можно ли средствами OpenGL рисовать скажем на...

Класс с помощью которого можно рисовать прямоугольники
Есть класс с помощью которого можно рисовать прямоугольники, нужно сделать так...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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