Форум программистов, компьютерный форум, киберфорум
Наши страницы

Как правильно сделать SearchView с выпадающим списком? - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Подскажите. Калькулятор Android http://www.cyberforum.ru/android-dev/thread1534944.html
Ребята, помогите блдондинке, пожалуйста! В изучении java android я еще новичок. Выполняю лабораторную "калькулятор на андроид": Написать приложение калькулятор, где аргументы и операции вводим...
Программирование Android Виснет приложение Здравствуйте. Почему-то иногда вместо того, чтобы выплюнуть ошибку приложение просто зависает, обычно из-за NPE, после исправления виснут перестает, но в таких случаях сложно найти причину ошибки... http://www.cyberforum.ru/android-dev/thread1534918.html
Android. Как сохранить ArrayList<String> в файл Программирование Android
Ребята, помогите пожалуйста. Есть список: ArrayList<String> myList; Пишу приложение типа заметок на Android, в качестве контейнера для заметок использую ArrayList<String> Собственно, вопрос....
Отключение блокировки WAKE_LOCK Программирование Android
PowerManager powerManager; PowerManager.WakeLock wakeLock; powerManager = (PowerManager)getSystemService(POWER_SERVICE); wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My...
Программирование Android Непонятное поведение программы! http://www.cyberforum.ru/android-dev/thread1534830.html
есть счетчик, который выводит цифры в TextView (подобие секундомера) есть кнопка запуска, она же остановки счетчика. Кнопка остановки счетчика должна также обнулять его значение (т.е вписывать...
Программирование Android Вспышка при блокировке телефона Как заставить работать вспышку при блокировке (секунд 10+ работает и выключается, при разблокировке опять включается). подробнее

Показать сообщение отдельно
kalyashov
0 / 0 / 0
Регистрация: 19.10.2014
Сообщений: 40

Как правильно сделать SearchView с выпадающим списком? - Программирование Android

21.09.2015, 14:31. Просмотров 379. Ответов 0
Метки (Все метки)

Пример во вложениях.

Хочу сделать searchView c выпадающим списком.


Есть класс SearchDbAdapter, написанный по статье с habrahabr


Есть виртуальная FTS-таблица, которая содержит два столбца. Первый столбец (KEY_INPUT) — это список возможных запросов пользователей. Второй столбец (KEY_ANKER) — список html-файлов с якорями соответствующий этим запросам.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
public class SearchDbAdapter {
    private static final String DATABASE_NAME = "mhdb";
    private static final String FTS_VIRTUAL_TABLE = "srcht";
    private static final int DATABASE_VERSION = 1;
    public static final String KEY_INPUT = "rqst";
    public static final String KEY_ANKER = "ankr";
 
    private static final String DATABASE_CREATE = "CREATE VIRTUAL TABLE " + FTS_VIRTUAL_TABLE + " USING fts3(" + KEY_INPUT + "," + KEY_ANKER + ");";
 
    private final Context mCtx;
 
    // Массив с поисковыми запросами (темами и разделами, содержащимися в файлах)
    public static final String search_arr[] = {"data1","data2","data3",data4"};
    // Массив с соответствующими им html-файлами с якорями (файлы хранятся в папке assets проекта)
    public static final String ankers_arr[] = {"file1.html#an1","file2.html#an2","file1.html#an3","file1.html#an4"};
 
    private DatabaseHelper mDbHelper;
    private static SQLiteDatabase mDb;
 
    private static class DatabaseHelper extends SQLiteOpenHelper {
        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
        @Override
        public void onCreate(SQLiteDatabase db) {
 
            db.execSQL(DATABASE_CREATE);
            int LNGTH = search_arr.length;
            ContentValues initValues = new ContentValues();
            for(int i=0; i<LNGTH; i++){
                initValues.put(KEY_INPUT, search_arr[i]);
                initValues.put(KEY_ANKER, ankers_arr[i]);
                db.insert(FTS_VIRTUAL_TABLE, null, initValues);
                initValues.clear();
            }
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS " + FTS_VIRTUAL_TABLE);
            onCreate(db);
        }
    }
 
    public SearchDbAdapter(Context ctx) {
        this.mCtx = ctx;
    }
 
    public SearchDbAdapter open() throws SQLException {
        mDbHelper = new DatabaseHelper(mCtx);
        mDb = mDbHelper.getWritableDatabase();
        return this;
    }
 
    public void close() {
        if (mDbHelper != null) {
            mDbHelper.close();
        }
    }
 
    //метод, возвращающий курсор с данными
    public static Cursor searchAnker(String inputText) throws SQLException {
        inputText = inputText.toLowerCase();
        String query = "SELECT docid as _id," + KEY_INPUT + "," + KEY_ANKER + " FROM " + FTS_VIRTUAL_TABLE + " WHERE " +  KEY_INPUT + " MATCH '" + inputText + "';";
        Cursor mCursor = mDb.rawQuery(query,null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;
    }
}


Работа с SearchView ведется следующим образом:
1. В SearchView вводится поисковый запрос «data2». Слушатель SearchView вызывает метод searchAnker() класса SearchDbAdapter, который возвращает курсор (mCursor), содержащий запросы похожие на введенный текст и соответствующие этим запросам html-файлы с якорями: data2 request 3 — file1.html#an3 data2 request 4 — file2.html#an4
2. Содержащиеся в mCursor похожие запросы отображаются в выпадающем списке: data2 request 3, data2 request 4.
3. При клике по элементам выпадающего списка осуществляется запуск activity, в которую с интентом передаётся соответствующее имя html-файла с якорем из mCursor: file1.html#an3


Но я не до конца понимаю, как сделать этот самый выпадающий список.


Также столкнулся еще с одной проблемой, searchAnker почему-то возвращает пустой курсор, попробовал все варианты, которые есть в столбце KEY_INPUT


В методе onQueryTextChange я вызываю searchAnker(query), которому передается введенный текст query:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String text) {
 
            Toast toast = Toast.makeText(getApplicationContext(), "Text submit", Toast.LENGTH_SHORT);
            toast.show();
 
            return true;
        }
 
        @Override
        public boolean onQueryTextChange(String query) {
 
            try {
                cursor = sdb.searchAnker(query);
 
            } catch (SQLException e) {
                e.printStackTrace();
            }
 
            if(cursor.getCount() != 0)
            {
                // формируем столбцы сопоставления
                String[] from = new String[] { SearchDbAdapter.KEY_INPUT};
                int[] to = new int[] { R.id.search_result_text_view };
 
                // создааем адаптер и настраиваем список
                cursorAdapter = new SimpleCursorAdapter(MainActivity.this, R.layout.result_search_item, cursor, from, to, 0);
 
                searchView.setSuggestionsAdapter(cursorAdapter);
 
                return true;
            }
            else
            {
                return false;
            }
        }
    });

Что я делаю не так и как правильно реализовать этот выпадающий список?
0
Миниатюры
Как правильно сделать SearchView с выпадающим списком?  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru