Как создать поиск?
Как создать поиск?
Здравствуйте, подскажите пожалуйста как можно организовать поиск в приложении? Пользователь вводит текст, и если он есть (я так понял в файлах ресурсах, иди БД нужно создавать?) то он (результат поиска) выводится на экран.
Можно пожалуйста поподробней, что куда прописать, а то я нуб.
Можно пожалуйста поподробней, что куда прописать, а то я нуб.
Re: Как создать поиск?
Добрый день.
Большие специалисты не любят такие вопросы, слишком мало конкретики, поэтому вот вам ответ от новичка.
Уточните, какую информацию и где требуется искать в приложении?
Полный ответ можно найти, посмотрев уроки.
Для начала нужно создать данные ресурсы: БД, текстовый файл, или массив в проекте.
Поместить в Activity компоненты EditText и Button
По клику на Button уже производить поиск по нужному ресурсу и сообщать пользователю ответ.
Большие специалисты не любят такие вопросы, слишком мало конкретики, поэтому вот вам ответ от новичка.
Уточните, какую информацию и где требуется искать в приложении?
Полный ответ можно найти, посмотрев уроки.
Для начала нужно создать данные ресурсы: БД, текстовый файл, или массив в проекте.
Поместить в Activity компоненты EditText и Button
По клику на Button уже производить поиск по нужному ресурсу и сообщать пользователю ответ.
Re: Как создать поиск?
По подробней конечно можно, но для начала вам придется познакомится с основами информационного поиска, чтобы мы могли говорить на одном языке. Учитывая предмет, минимум это :
1. http://market.yandex.ua/product/6423381
2. http://market.yandex.ua/product/7622447 ... 1%82%D0%B0
1. http://market.yandex.ua/product/6423381
2. http://market.yandex.ua/product/7622447 ... 1%82%D0%B0
Re: Как создать поиск?
Требуется искать только текст. А куда лучше поместить не знаю. Например, пользователь вводит текст: "Первая мировая война нача", а приложение показывает: "Первая мировая война началась 28 июля 1914 года".rsdev писал(а):Уточните, какую информацию и где требуется искать в приложении?
Re: Как создать поиск?
Если речь про поиске среди того, что есть в приложении (например статья с заголовком "Первая мировая война началась 28 июля 1914 года" ), то делается это относительно просто, а если инфа должна браться из "воздуха" - можете смело бросать свою затею.Petrik писал(а):Требуется искать только текст. А куда лучше поместить не знаю. Например, пользователь вводит текст: "Первая мировая война нача", а приложение показывает: "Первая мировая война началась 28 июля 1914 года".rsdev писал(а):Уточните, какую информацию и где требуется искать в приложении?
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Как создать поиск?
Да, что есть в приложении. Куда можно поместить текст, что б потом пользователь мог его найти (да же если вводил бы не полный текст, а его фрагмент)?
Re: Как создать поиск?
Смотря где инфа хранится.Petrik писал(а):Да, что есть в приложении. Куда можно поместить текст, что б потом пользователь мог его найти (да же если вводил бы не полный текст, а его фрагмент)?
Допустим юзер вводит текст в EditText, ему нужно написать TextWatcher
Код: Выделить всё
et1.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
if( s.toString() не empty ){
// Тут фильтруем и собираем результаты ( смотри пункт 1 или 2 )
}
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
2) Если в стринге то можно встроенным методом
Код: Выделить всё
String str = "раз два три Иван четыре пять";
if( str.contains("три Ив") )
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Как создать поиск?
Информация хранится в массиве строк. Создавал в лэйауте EditText и ListView
[syntax=java]final ListView lvSearch = (ListView) findViewById(R.id.lvSearch);
inputSearch = (EditText) findViewById(R.id.inputSearch);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.spisok,
R.layout.text_list_item);
lvSearch.setAdapter(adapter);
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
SearchableActivity.this.adapter.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
}[/syntax]
Но как только вводишь первый символ появляется ошибка.
[syntax=java5]03-02 21:48:50.692 9590-9590/com.sait.android E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at com.sait.android.SearchableActivity$1.onTextChanged(SearchableActivity.java:55)
at android.widget.TextView.sendOnTextChanged(TextView.java:7373)
at android.widget.TextView.handleTextChanged(TextView.java:7432)
at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:9044)
at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:962)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:496)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30)
at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:674)
at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:437)
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:333)
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5388)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)[/syntax]
И ещё: Можно ли, что б в ListView бралась информация не с одного <string-array name="xxx"> а с нескольких, и так же при вводе текста искала совпадение и в них?
[syntax=java]final ListView lvSearch = (ListView) findViewById(R.id.lvSearch);
inputSearch = (EditText) findViewById(R.id.inputSearch);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.spisok,
R.layout.text_list_item);
lvSearch.setAdapter(adapter);
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
SearchableActivity.this.adapter.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
}[/syntax]
Но как только вводишь первый символ появляется ошибка.
[syntax=java5]03-02 21:48:50.692 9590-9590/com.sait.android E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at com.sait.android.SearchableActivity$1.onTextChanged(SearchableActivity.java:55)
at android.widget.TextView.sendOnTextChanged(TextView.java:7373)
at android.widget.TextView.handleTextChanged(TextView.java:7432)
at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:9044)
at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:962)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:496)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30)
at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:674)
at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:437)
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:333)
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5388)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)[/syntax]
И ещё: Можно ли, что б в ListView бралась информация не с одного <string-array name="xxx"> а с нескольких, и так же при вводе текста искала совпадение и в них?
Re: Как создать поиск?
SearchableActivity.java:55 строчку в студию, где-то в ней затаилось НПЕ
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Как создать поиск?
[syntax=java]SearchableActivity.this.adapter.getFilter().filter(cs);[/syntax]
Re: Как создать поиск?
SearchableActivity.this что за прием такой? ссылки на инстанс активити нету?
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Как создать поиск?
Добрый день!
В приложении есть ArrayList<Product>, в Product есть String name. Необходимо в приложении сделать поиск по названию продуктов.
Начал реализовывать с помощью SearchView и возникло пару непонятных моментов. Мне надо, чтобы при вводе названия появлялся выпадающий вниз список с подходящими продуктами, при нажатии на элемент списка, выводилось его детальное описание, я так понимаю в новой активности. А если пользователь нажмет на клавиатуре в процессе поиска кнопку поиска, то должен вывестись GridView всех подходящих продуктов.
Из описания на android developer мне не совсем понятно. Где необходимо прописывать meta-data, в активности, в которой меню с поиском или в объявлении активности, которая запускается при поиске?
<activity ... >
...
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
а если мне надо выводить результат в виде выпадающего списка, мне нужно использовать поисковую активность, или как-то по другому? Вообще эта активность запускается когда, когда человек начал ввод?
И вторая проблема:
getMenuInflater().inflate(R.menu.menu_with_search_and_basket, menu);
MenuItem search = menu.findItem(R.id.menu_search); //тут ок
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); // а здесь всегда null
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
return true;
xml меню
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_search"
android:actionViewClass="android.support.v7.widget.SearchView"
android:icon="@drawable/icon_search"
android:title="@string/menu_search"
app:showAsAction="collapseActionView|ifRoom"/>
</menu>
пробовал и android.widget.SearchView, результат тот же
В приложении есть ArrayList<Product>, в Product есть String name. Необходимо в приложении сделать поиск по названию продуктов.
Начал реализовывать с помощью SearchView и возникло пару непонятных моментов. Мне надо, чтобы при вводе названия появлялся выпадающий вниз список с подходящими продуктами, при нажатии на элемент списка, выводилось его детальное описание, я так понимаю в новой активности. А если пользователь нажмет на клавиатуре в процессе поиска кнопку поиска, то должен вывестись GridView всех подходящих продуктов.
Из описания на android developer мне не совсем понятно. Где необходимо прописывать meta-data, в активности, в которой меню с поиском или в объявлении активности, которая запускается при поиске?
<activity ... >
...
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
а если мне надо выводить результат в виде выпадающего списка, мне нужно использовать поисковую активность, или как-то по другому? Вообще эта активность запускается когда, когда человек начал ввод?
И вторая проблема:
getMenuInflater().inflate(R.menu.menu_with_search_and_basket, menu);
MenuItem search = menu.findItem(R.id.menu_search); //тут ок
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); // а здесь всегда null
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
return true;
xml меню
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_search"
android:actionViewClass="android.support.v7.widget.SearchView"
android:icon="@drawable/icon_search"
android:title="@string/menu_search"
app:showAsAction="collapseActionView|ifRoom"/>
</menu>
пробовал и android.widget.SearchView, результат тот же
Re: Как создать поиск?
Делал по примеру отсюда http://www.androidhive.info/2012/09/and ... -listview/doter.ua писал(а):SearchableActivity.this что за прием такой? ссылки на инстанс активити нету?
UPD. Что то тыкал, менял и вроде как, каким то чудом, получилось. Спасибо, что откликнулись на помощь.
Re: Как создать поиск?
Делал по примеру отсюда http://www.androidhive.info/2012/09/and ... -listview/
Как сделать что бы можно было искать русские слова в списке, а то он только на английском ищет??
Как сделать что бы можно было искать русские слова в списке, а то он только на английском ищет??
Re: Как создать поиск?
По подробней конечно можно, но для начала вам придется познакомится с основами информационного поиска, чтобы мы могли говорить на одном языке. Учитывая предмет, минимум это :
Re: Как создать поиск?
UPD. Что то тыкал, менял и вроде как, каким то чудом, получилось. Спасибо, что откликнулись на помощь.