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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 47, средняя оценка - 4.64
MonStar
19 / 19 / 3
Регистрация: 10.04.2011
Сообщений: 225
#1

SearchView или своя реализация поиска (UI) - Программирование Android

01.07.2013, 20:24. Просмотров 6119. Ответов 32
Метки нет (Все метки)

Требуется реализовать интерфейс для поиска. В ActionBar имеется SearchView, который отправляет запрос на сервер, после этого приходит ответ, который нужно отобразить в этой-же Activity и дать возможность выбрать нужный.

Основные проблемные моменты это:
-возможность вывести результат только в части экрана под строкой поиска
-закрывать поиск по клику вне зоны поиска и результатов

Пытался реализовать стандартным способом, но там приходится подключать базу данных, добавлять кучу непонятных фич.
Если выводить в обычном ListView, то нет возможности нормально отлавливать клики, попадает или нет в область списка.
PopupWindow не поддается нормальной разметке. Размеры можно указать только в цифрах с неизвестными величинами, в результате на разных экранах выглядит криво. При чем если параметр focusable = true, то блокируются посторонние элементы интерфейса, а если false то не обрабатывается клик по итемам.

Я в ступоре, нужна помощь. Пример моей реализации ниже, нужно что-то подобное
Миниатюры
SearchView или своя реализация поиска (UI)  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.07.2013, 21:42     SearchView или своя реализация поиска (UI) #2
не вижу ничего сложного в стандартном подходе, не нужно никаких баз, нужен только курсор.
вот пример создания и наполнения курсора.
Java
1
2
3
4
5
6
7
8
9
10
    String[] columnNames = {"_id","text"}
    MatrixCursor cursor = new MatrixCursor(columnNames);
    String[] array = Resources.getSystem().getStringArray(R.id.allStrings); //if strings are in resources
    String[] temp = new String[2];
    int id = 0;
    for(String item : array){
        temp[0] = Integer.toString(id++);
        temp[1] = item;
        cursor.addRow(temp);
    }
MonStar
19 / 19 / 3
Регистрация: 10.04.2011
Сообщений: 225
01.07.2013, 21:48  [ТС]     SearchView или своя реализация поиска (UI) #3
Цитата Сообщение от V0v1k Посмотреть сообщение
Кликните здесь для просмотра всего текста
не вижу ничего сложного в стандартном подходе, не нужно никаких баз, нужен только курсор.
вот пример создания и наполнения курсора.
Java
1
2
3
4
5
6
7
8
9
10
    String[] columnNames = {"_id","text"}
    MatrixCursor cursor = new MatrixCursor(columnNames);
    String[] array = Resources.getSystem().getStringArray(R.id.allStrings); //if strings are in resources
    String[] temp = new String[2];
    int id = 0;
    for(String item : array){
        temp[0] = Integer.toString(id++);
        temp[1] = item;
        cursor.addRow(temp);
    }
Как я смогу отображать результаты подобным образом? Мне важен именно тот момент, что бы на заднем фоне была видна активити. Собственно сам поиск работает без проблем, нужно вывести результаты на экран и иметь возможность их скрыть (вместе с SearchView), если пользователь кликнул в другой области
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.07.2013, 21:56     SearchView или своя реализация поиска (UI) #4
та враде так и работает стандартная реализация через адаптер.
MonStar
19 / 19 / 3
Регистрация: 10.04.2011
Сообщений: 225
01.07.2013, 21:59  [ТС]     SearchView или своя реализация поиска (UI) #5
Цитата Сообщение от V0v1k Посмотреть сообщение
та враде так и работает стандартная реализация через адаптер.
Видимо я чего-то не понимаю. Как мне сделать вывод результатов внизу под поиском? То что на скрине это PopupWindow реализованная мной довольно криво. Я так понимаю что есть возможность переложить вывод на плечи андроида.
http://developer.android.com/intl/ru...ggestions.html по этой ссылке что-то подобное, но реализуемо только через базу данных
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.07.2013, 22:16     SearchView или своя реализация поиска (UI) #6
в SearchView можно засунуть адаптер setSuggestionsAdapter() который создает этот выпадающий список методом getDropDownView(), если я все правильно понял.

Добавлено через 8 минут
Цитата Сообщение от MonStar Посмотреть сообщение
Если выводить в обычном ListView, то нет возможности нормально отлавливать клики, попадает или нет в область списка.
не понятно.
Цитата Сообщение от MonStar Посмотреть сообщение
PopupWindow не поддается нормальной разметке. Размеры можно указать только в цифрах с неизвестными величинами, в результате на разных экранах выглядит криво.
что за неизвестные величины?
Цитата Сообщение от MonStar Посмотреть сообщение
При чем если параметр focusable = true, то блокируются посторонние элементы интерфейса, а если false то не обрабатывается клик по итемам.
ну правильно, при первом клике за пределами попапа должен просто пропадать попап, а потом уже можно кликать по другим элементам.
MonStar
19 / 19 / 3
Регистрация: 10.04.2011
Сообщений: 225
01.07.2013, 22:30  [ТС]     SearchView или своя реализация поиска (UI) #7
Цитата Сообщение от V0v1k Посмотреть сообщение
в SearchView можно засунуть адаптер setSuggestionsAdapter() который создает этот выпадающий список методом getDropDownView(), если я все правильно понял.
Я не совсем понял, что делать с методом getDropDownView, для чего параметры, которые подаются в него и как вообще он связан с адаптером, что бы я мог отобразить список
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.07.2013, 22:32     SearchView или своя реализация поиска (UI) #8
вы никогда адаптерами не пользовались?
MonStar
19 / 19 / 3
Регистрация: 10.04.2011
Сообщений: 225
01.07.2013, 22:37  [ТС]     SearchView или своя реализация поиска (UI) #9
Цитата Сообщение от V0v1k Посмотреть сообщение
вы никогда адаптерами не пользовались?
Разумеется пользовался. Я просто не уверен, что вы поняли мою проблему, так как начал описывать свои решения.
Грубо говоря у меня есть готовый список, из 5-10 элементов, который мне нужно отобразить под виджетом поиска в углу экрана. Сам процесс поиска происходит на сервере, а у меня только результат.
Этот кусочек с результатами должен возвращать мне выбранный итем из списка. В случае нажатия на любую другую область он должен закрываться.

Итак у меня есть метод setSuggestionsAdapter, который требует CursorAdapter, что бы создать его мне нужно отдать ему Cursor с данными. Потом вызвать метод getDropDownView() в который передать некую позицию. Тут явно пропущен огромный кусок, в котором кроется моя проблема. Как отобразить дурацкое окошко с результатами.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.07.2013, 22:43     SearchView или своя реализация поиска (UI) #10
Цитата Сообщение от MonStar Посмотреть сообщение
Тут явно пропущен огромный кусок, в котором кроется моя проблема. Как отобразить дурацкое окошко с результатами.
это окошко по умолчанию реализовано SearchView, оно отображается если есть данные для него
Цитата Сообщение от MonStar Посмотреть сообщение
http://developer.android.com/intl/ru...ggestions.html по этой ссылке что-то подобное, но реализуемо только через базу данных
нет, здесь через Content Provider, в принципе, вам подходит.
MonStar
19 / 19 / 3
Регистрация: 10.04.2011
Сообщений: 225
01.07.2013, 22:47  [ТС]     SearchView или своя реализация поиска (UI) #11
Цитата Сообщение от V0v1k Посмотреть сообщение
это окошко по умолчанию реализовано SearchView, оно отображается если есть данные для него
Вот именно моя проблема в том, как вызвать это окошко.
Способ с ContentProvider мне не подходит, т.к. это много ненужных действий по реализации базы данных, а результаты приходят с сервера после ввода каждой буквы. Это будет огромная куча запросов и начнутся тормоза.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.07.2013, 22:50     SearchView или своя реализация поиска (UI) #12
Java
1
2
3
4
вот нашел пример кода с адаптером
searchView.setOnQueryTextListener(this);
searchAdapter = new SimpleCursorAdapter(this, R.layout.listentry, null, new String[] { "name" }, new int[] { R.id.name_entry }, 0);
searchView.setSuggestionsAdapter(searchAdapter);
Then, in the onQueryTextChanged method I have this:
Java
1
searchAdapter.changeCursor(cursor);
здесь cursor наполняете данными которые должны отобразится в этом попапе, как наполнять я писал выше.

Добавлено через 55 секунд
Цитата Сообщение от MonStar Посмотреть сообщение
Вот именно моя проблема в том, как вызвать это окошко.
оно автоматически вызывается.
Цитата Сообщение от MonStar Посмотреть сообщение
Способ с ContentProvider мне не подходит, т.к. это много ненужных действий по реализации базы данных, а результаты приходят с сервера после ввода каждой
не нужно там никаких баз данных.
MonStar
19 / 19 / 3
Регистрация: 10.04.2011
Сообщений: 225
01.07.2013, 23:16  [ТС]     SearchView или своя реализация поиска (UI) #13
Цитата Сообщение от V0v1k Посмотреть сообщение
Java
1
2
3
4
вот нашел пример кода с адаптером
searchView.setOnQueryTextListener(this);
searchAdapter = new SimpleCursorAdapter(this, R.layout.listentry, null, new String[] { "name" }, new int[] { R.id.name_entry }, 0);
searchView.setSuggestionsAdapter(searchAdapter);
Then, in the onQueryTextChanged method I have this:
Java
1
searchAdapter.changeCursor(cursor);
здесь cursor наполняете данными которые должны отобразится в этом попапе, как наполнять я писал выше.
Ура, мне удалось вызвать это окошко. Спасибо огромнейшее. Не знаю, что бы я делал без вашего форума и конкретно без вашей поддержки ) Мне удалось решить уже не одну проблему
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.07.2013, 23:26     SearchView или своя реализация поиска (UI) #14
и вам спасибо, самому скоро это пригодится

Добавлено через 4 минуты
я искал, вы проверяли, совместными усилиями разобрались
MonStar
19 / 19 / 3
Регистрация: 10.04.2011
Сообщений: 225
01.07.2013, 23:33  [ТС]     SearchView или своя реализация поиска (UI) #15
Цитата Сообщение от V0v1k Посмотреть сообщение
и вам спасибо, самому скоро это пригодится

Добавлено через 4 минуты
я искал, вы проверяли, совместными усилиями разобрались
В таком случае еще небольшой вопрос. Как обработать нажатие по FragmentActivity в любой области. Не важно ActionBar или что-то другое, весь экран нужно захватить. Нужно будет закрывать поиск по клику просто.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.07.2013, 23:37     SearchView или своя реализация поиска (UI) #16
даже не знаю.
а разве он не закрывается? не проверял SearchView но есть пример с AutoCompleteTextView и в нем попап сам прячется при клике за его пределами.
MonStar
19 / 19 / 3
Регистрация: 10.04.2011
Сообщений: 225
01.07.2013, 23:39  [ТС]     SearchView или своя реализация поиска (UI) #17
Цитата Сообщение от V0v1k Посмотреть сообщение
даже не знаю.
а разве он не закрывается? не проверял SearchView но есть пример с AutoCompleteTextView и в нем попап сам прячется при клике за его пределами.
Сама строка поиска остается открытой. Прячется только список. Поэтому хочу отдельно обработать клик, что бы закрывать
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.07.2013, 23:53     SearchView или своя реализация поиска (UI) #18
даже не знаю что посоветовать, не знаю как захватить экшен бар, но все остальное можно перекрыть невидимой View и отлавливать по нему тачи или экстенднуть рутовый лаяут и в нем перехватывать тачи.

кстати, строка поиска прячется при нажатии хардварного бека или бек иконки в экшен баре.
MonStar
19 / 19 / 3
Регистрация: 10.04.2011
Сообщений: 225
02.07.2013, 15:42  [ТС]     SearchView или своя реализация поиска (UI) #19
По ходу появился вопрос. Как вывести результаты поиска, как только его открыли. Т.е. что бы не вводя ни одного символа пользователь уже видел результаты.
Так же нужно что бы поиск начинался с первого символа, а у меня результаты выводятся только после второго

Добавлено через 17 минут
И еще. Как получить выбранный элемент из списка
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2013, 15:51     SearchView или своя реализация поиска (UI)
Еще ссылки по теме:
Android Спрятать SearchView в некоторых фрагментах
Скрыть тулбар у 1 фрагмента Tabbed Activity + toolbar + Searchview Android
Как добавить динамически в ToolBar виджет SearchView в нужных фрагментах Android
Searchview закрыть поиск программно, также как закрывается кнопкой back Android
Android Как указать стандартным галере или фото путь поиска картинок

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

Или воспользуйтесь поиском по форуму:
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.07.2013, 15:51     SearchView или своя реализация поиска (UI) #20
Цитата Сообщение от MonStar Посмотреть сообщение
И еще. Как получить выбранный элемент из списка
setOnSuggestionListener вроде - http://developer.android.com/referen...earchView.html

Добавлено через 48 секунд
Цитата Сообщение от MonStar Посмотреть сообщение
Как вывести результаты поиска, как только его открыли. Т.е. что бы не вводя ни одного символа пользователь уже видел результаты.
Так же нужно что бы поиск начинался с первого символа, а у меня результаты выводятся только после второго
хз, это стандартное поведение. каким может быть результат поиска если юзер ничего не ввел?
Yandex
Объявления
02.07.2013, 15:51     SearchView или своя реализация поиска (UI)
Ответ Создать тему
Опции темы

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