#android #android-layout #search #textview #android-jetpack
#Android #android-макет #Поиск #textview #android-jetpack
Вопрос:
Я не хочу использовать режим поиска или стороннюю библиотеку для реализации панели поиска. Я хочу использовать режим редактирования текста, который я могу настроить для реализации моей панели поиска. Как мне это сделать? Я помню, как читал какой-то ответ или статью, в которых они устанавливали атрибут для редактирования текста, чтобы он функционировал как режим поиска. что-то вроде:
<EditText
android:id="@ id/search_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:name="search view"/>
Схема, объясняющая архитектуру моего обновления приложения
:
То, что я пытался сделать выше, имеет много других сложностей, поэтому теперь я пробую другой метод. Вот что я хочу сделать. Я хочу использовать вид поиска в качестве представления действий для пункта меню. Мое приложение работает по шаблону одного действия, и в моем действии есть два дочерних фрагмента. Меню и панель инструментов не нужно раздувать по-разному в разных фрагментах, поскольку они выглядят одинаково в обоих фрагментах. Но проблема в том, что вид поиска должен вести себя по-разному в разных фрагментах. Итак, в первом фрагменте, когда вызывается onQuerySubmit() , я хочу использовать действие навигации и открыть второй фрагмент и передать во query
второй фрагмент, используя безопасные аргументы. Однако во втором фрагменте я хочу показать результаты поиска на основе запроса, который был передан первым фрагментом, или запросов, которые пользователь может ввести, как только они достигнут второго фрагмента, поскольку оба фрагмента должны иметь вид поиска (и именно поэтому он был раздут вдействие).
Что я мог бы сделать, так это получить ссылку на родительское действие из обоих фрагментов и использовать onQueryTextSubmit()
, но для этого мне пришлось бы использовать setHasOptionsMenu(true)
оба фрагмента, которые сбрасывают состояние панели инструментов, а при изменении конфигурации или транзакции фрагмента представление поиска сворачивается и данные теряются. Я не могу использовать onQueryTextSubmit()
ни один из фрагментов onViewCreated()
, поскольку действие onCreateOptionsMenu()
вызывается после onCreate()
, и если я получу ссылку на пункт меню «Вид поиска» из действия и попытаюсь что-либо с ним сделать из любого из фрагментов onViewCreated()
, я получу исключение нулевого указателя.
После получения ссылки на расширенное меню или один из пунктов меню (в данном случае вид поиска), есть ли способ, которым я могу работать с ним после onCreateOptionsMenu()
вызова activity, но без необходимости использовать setHasOptionsMenu(true)
and onCreateOptionsMenu()
в любом из фрагментов.
Вот ссылка на репозиторий моего приложения для получения дополнительной информации, если это необходимо]
Комментарии:
1. вы хотите просто найти значение из выпадающего списка и выбрать его или вы тоже хотите сохранить его?
2. также скажите kotlin или java
3. @vishalN Котлин предпочтительнее, но Java будет работать. Кроме того, я тоже не хочу его сохранять.
Ответ №1:
точно это нельзя сделать с помощью EditText, но с помощью AutoCompleteTextView
<AutoCompleteTextView
android:id="@ id/search_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:name="search view"
android:completionThreshold="1"
android:completionHint="@string/message"
android:inputType="text"
/>
Приведенный выше XML-код создает поле ввода текста автозаполнения, в котором при вводе 1 слова в раскрывающемся списке начнут отображаться совпадения (поскольку completeionThreshold =»1″). Этого недостаточно, вам также необходимо добавить к нему адаптер, из которого он будет отображать искомый элемент в раскрывающемся списке.
https://developer.android.com/reference/kotlin/android/widget/AutoCompleteTextView
проверьте эту ссылку для программной части.
Комментарии:
1. Пожалуйста, ознакомьтесь с обновлением, я изменил свой подход. Спасибо за ответ.
Ответ №2:
вы можете использовать собственный SearchView
<androidx.appcompat.widget.SearchView
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
Подробнее посмотрите на: https://developer.android.com/reference/android/widget/SearchView
Комментарии:
1. Как я уже сказал, он недостаточно настраиваемый, поэтому я не хочу использовать режим поиска.
2. Пожалуйста, ознакомьтесь с обновлением, в котором я изменил свой подход.