首页 > 解决方案 > android:onClick 属性定义在视图类 androidx.appcompat.widget.AppCompatButton

问题描述

我在 xml 中尝试了 2 个不同的 AppcompatButtons 和普通按钮,但我得到了同样的错误。 它是一个谷歌地图,我只想搜索一个城市,我会去城市位置

方法一

<androidx.appcompat.widget.AppCompatButton
        app:layout_constraintLeft_toRightOf="@+id/sv_location"
        android:id="@+id/startBtn"
        android:layout_marginLeft="5dp"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:onClick="startBtn"
        android:text="add"
        tools:ignore="MissingConstraints" />

方法二

<Button
        app:layout_constraintLeft_toRightOf="@+id/sv_location"
        android:id="@+id/startBtn"
        android:layout_marginLeft="5dp"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:onClick="startBtn"
        android:text="add"
        tools:ignore="MissingConstraints" />

我在按钮 onclick 中使用搜索视图

fun startBtn(view: View){
    val searchView:SearchView =view.findViewById<SearchView>(R.id.sv_location)
    lateinit var location: String
    location = searchView.query.toString()
    var addressList: List<Address>? = null

    if (location == null || location == "") {
        Toast.makeText(requireContext(),"provide location",Toast.LENGTH_SHORT).show()
    }

    else{
        val geoCoder = Geocoder(requireContext())
        try {
            addressList = geoCoder.getFromLocationName(location, 1)

        } catch (e: IOException) {
            e.printStackTrace()
        }
        val addresss = addressList!![0]
        val latLng = LatLng(addresss.latitude, addresss.longitude)
        nMap!!.addMarker(MarkerOptions().position(latLng).title(location))
        nMap!!.animateCamera(CameraUpdateFactory.newLatLng(latLng))
        Toast.makeText(requireContext(), addresss.latitude.toString() + " " + addresss.longitude, Toast.LENGTH_LONG).show()
    }


    searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener{
        override fun onQueryTextSubmit(p0: String?): Boolean {
            searchView.clearFocus()

            return false
        }

        override fun onQueryTextChange(p0: String?): Boolean {
            TODO("Not yet implemented")

            return false
        }

    })

}

图像失败,您无法从此链接中看到异常

标签: androidkotlin

解决方案


这不起作用的原因是因为在 xml 的两个示例中,您都有一个指向方法“startBtn”的 onClick 属性。此方法未在您的活动中定义。一旦你定义了它,它就会告诉按钮一旦它被点击它应该做什么。以下是该方法的示例:

fun startBtn(v:View) {
  Toast.makeText(this, "Clicked on Button", Toast.LENGTH_LONG).show()
}

在按钮所在的任何活动/片段中定义此方法。

对于您的第二个问题,请确保您正在导入以下内容:

import androidx.appcompat.widget.SearchView;

推荐阅读