kotlin simple_list_item_1 onclicklistener无效

问题描述 投票:0回答:2

我正在构建购物清单应用程序,这是一项活动。

基本上,该活动收集房屋周围所有位置的数据库,并提取名称列表以创建要显示的StringsArrayList。

之后,它将prepareListView绑定到变量prepareList并创建一个布局为simple_list_item_1的arrayAdapter。

附加适配器后,它将设置onItemClicListener。

Listview可以正常工作,但是我无法使onClickListener正常工作。

我已经搜索了该站点,并且通常也在Internet上搜索,但没有找到解决方案。我可以让侦听器与自定义适配器一起使用,但这对于我想做的事情来说是一个过大的杀伤力。大多数解决方案是Java,在实现onClick函数方面,与Kotlin似乎有很大不同。

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视图一起使用吗?

android listview kotlin onitemclicklistener
2个回答
0
投票

您需要通过以下方式在Kotlin中设置点击监听器:

yourListView.onItemClickListener = AdapterView.OnItemClickListener { parent, view, position, id ->
  // Do something in response to the click
}

Handling click events

[使用当前代码,您实际上正在尝试在listView本身上设置点击监听器。


0
投票

感谢Taseer-非常感谢

这让我感到非常困惑

我昨天整天都在工作,并尝试了您的建议以及无数其他组合,因此很遗憾,我发布了我尝试的一种不正确的变体形式。我今天早上把它放回去,但无济于事-点击监听器仍然无法正常工作。但是,凭借着正确的代码知识,我再次去了Internet并在https://android--code.blogspot.com/2018/02/android-kotlin-listview-example.html

处找到了ListView示例。

我创建了一个新项目,并在代码中进行了复制-效果很好,所以我至少正在开发工作代码。

我看不出我的代码与下载的代码有任何显着差异,因此请确保将xml和kt代码复制到活动中,以完全替代我编写的代码。这次没有用。我认为这一定与活动的链接有关,所以我从最初的原则开始,对主要活动也是如此。这样,工作示例的主要活动与我正在创建的程序的主要活动是相同的。仍然没有用!!

因此,问题与代码无关,因为两个项目之间的代码相同。我开始更深入地搜索。首先使两个Gradle文件和Manifest文件相同,然后删除我创建的所有其他活动。……仍然无法正常工作!

最后查看了最后一个选项-样式,是的,我终于设法找到了问题的原因。我不小心将TextView样式的父级设置为Widget.AppCompat.AutoCompleteTextView而不是android:Widget.TextView。

因此,我加载了程序的备份并纠正了此错误,它现在可以正常工作。我完全不知道为什么配色方案的其他样式会阻止单击式侦听器的操作,但我认为AutoCompleteTextView样式具有自己的侦听器优先。

再次感谢您的帮助

eggie

© www.soinside.com 2019 - 2024. All rights reserved.