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

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

10.10.2014, 12:42. Просмотров 571. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Можно ли рисовать лупу не во всех фрагментах? (Программирование Android):

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

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

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

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

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

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

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
421 / 404 / 65
Регистрация: 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
421 / 404 / 65
Регистрация: 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
Привет! Вот еще темы с решениями:

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

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

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

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


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

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

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