kotlin simple_list_item_1 onclicklistener не работает - PullRequest
0 голосов
/ 04 октября 2019

Я создаю приложение со списком покупок, и это одно из действий.

В основном, действие берет базу данных всех мест вокруг дома и извлекает список имен, чтобы создать массивList of Strings дляdisplay.

После этого он связывает prepareListView с переменной prepareList и создает arrayAdapter с макетом simple_list_item_1.

После подключения адаптера он устанавливает onItemClicListener.

Listview работает отлично, но я не могу заставить работать onClickListener.

Я искал этот сайт, а также, как правило, в Интернете, не найдя решения. Я могу заставить слушателя работать с нестандартным адаптером, но это то, что я пытаюсь сделать, излишним. Большинство решений - это Java, которая, похоже, сильно отличается от Kotlin в реализации функции onClick.

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.prepare)

    // populate the home locations array
    val  prepareHomeLocations = productDatabase!!.getAllHomeLocations()

    // create a reduced array for displaying
    val reducedHomeLocations = ArrayList<String>()
    for (items in prepareHomeLocations.indices) {
        reducedHomeLocations.add(prepareHomeLocations[items].homeArea)
    }

    // bind the listView
    var prepareList = findViewById<ListView>(R.id.prepareListView)

    // create an adapter
    val adapter =
        ArrayAdapter(this@Prepare, android.R.layout.simple_list_item_1, reducedHomeLocations)

    // attach the adapter
    prepareList.adapter = adapter

    // set the onItemClicListener
    prepareList.setOnItemClickListener { parent, view, position, id ->

        Toast.makeText(this@Prepare, "item Clicked", Toast.LENGTH_SHORT).show()
    }
}

Неужели onClickListener не будет работать с представлением simple_list_item_1?

1 Ответ

0 голосов
/ 05 октября 2019

Спасибо Taseer - очень ценю

Это меня очень озадачило

Я вчера работал весь день и попробовал ваше предложение вместе с бесчисленным множеством других комбинаций, поэтому, к сожалению, я разместил один из неправильных вариантовЯ пытался. Я положил его обратно этим утром, но безрезультатно - все еще не работал приемник щелчка. Однако, вооружившись знанием того, что это был правильный код, я снова отправился на поиски в Интернете и нашел пример ListView по адресу https://android - code.blogspot.com/2018/02/android-kotlin-listview-example.html

Я создал новый проект и скопировал в код - он работал отлично, и поэтому я по крайней мере двигался вперед с рабочим кодом.

Я не мог видеть никаких существенных различийв моем коде к тому, который я скачал и так, чтобы убедиться, что я скопировал код xml и kt в действие в качестве полной замены кода, который я написал. На этот раз это не сработало. Думая, что это должно быть связано с деятельностью, я начал с первых принципов и сделал то же самое с основной деятельностью. Таким образом, основная деятельность рабочего примера и программы, которую я создаю, идентичны. Тем не менее, это не сработало !!

Поэтому проблема заключалась в том, что с кодом ничего не было связано, поскольку он идентичен в двух проектах. Я начал искать глубже. Сначала сделали два файла Gradle и файл Manifest одинаковыми и удалили все остальные действия, которые я создал ....... все еще не работает!

Наконец-то посмотрел последний вариант - Styles and, yipeeМне наконец удалось отследить причину проблемы. Я случайно установил родителем стиля TextView Widget.AppCompat.AutoCompleteTextView вместо android: Widget.TextView.

Итак, я загрузил резервную копию программы и исправил эту ошибку, и теперь она работает правильно. Я абсолютно не знаю, почему другой стиль для цветовой схемы должен блокировать работу прослушивателя при нажатии, но я предполагаю, что у стиля AutoCompleteTextView есть собственный прослушиватель, который получил приоритет.

Еще раз большое спасибо заваша помощь

яйцо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...