SearchView не показывает предложения - PullRequest
0 голосов
/ 27 сентября 2019

Итак, я хочу показать предложение в searchView, которое теперь находится внутри панели инструментов.Поэтому я создал этот адаптер, и он, похоже, не работает, и приложение также аварийно завершает работу с этой ошибкой StringIndexOutOfBoundsException

Адаптер

class SearchHitchAdapter(context: Context, cursor: Cursor) : CursorAdapter(context, cursor, false) {

    private val dataSet = arrayListOf<String>(*context.resources.getStringArray(R.array.city_states))

    override fun newView(context: Context?, cursor: Cursor?, parent: ViewGroup?): View {
        val inflater = context!!.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
        return inflater.inflate(android.R.layout.simple_dropdown_item_1line, parent, false)
    }

    override fun bindView(view: View?, context: Context?, cursor: Cursor?) {
        val position = cursor!!.position
        val textView = view!!.findViewById(android.R.id.text1) as TextView
        textView.text = dataSet[position]
    }
}

Эта функциябыть вызванным изнутри onQueryTextChange

 private fun setUpSearchSuggestions(query: String) {

        val dataSet = getCityList()

        val columns = arrayOf("_id", "text")
        val temp = arrayOf(0, "default")
        val cursor = MatrixCursor(columns)

        for (i in 0 until dataSet.size) {

            val city = dataSet[i]

            if (city.toLowerCase(Locale.US).contains(query.toLowerCase(Locale.US))) {
                temp[0] = i
                temp[1] = city[i]
                cursor.addRow(temp)
            }
        }
        searchVIew.suggestionsAdapter = SearchAdapter(context!!, cursor)
    }

Это не работает, может кто-нибудь мне помочь или предложить мне что-нибудь.

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Эта строка в вашем коде выглядит подозрительно:

temp[1] = city[i]

Это то же самое, что и запись temp[i] = city.get(i): вы пытаетесь получить символ из city в позиции i.

Так как i является переменной цикла, и вы перебираете dataset, это очень вероятно ошибка.Нет гарантии, что каждая строка в наборе данных будет такой же длинной, как и сам набор данных.Представьте, что у вас есть список из тысячи городов;очень велики шансы, что название каждого города будет содержать менее тысячи символов.

0 голосов
/ 27 сентября 2019

Исключение «StringIndexOutOfBoundsException» говорит о том, что вы обращаетесь к данным, которых не существует.Проверьте, имеет ли ваш набор данных правильный список.

...