xml onClick 中的 Kotlin 不起作用
Posted
技术标签:
【中文标题】xml onClick 中的 Kotlin 不起作用【英文标题】:Kotlin in xml onClick not work 【发布时间】:2017-04-14 14:28:00 【问题描述】:我在学习 kotlin,现在对我来说不是很清楚。我有xml
<ImageView
android:id="@+id/aries"
android:layout_
android:layout_
android:padding="10dp"
android:tag="1"
android:onClick="clickItemHoro"
android:src="@drawable/aries" />
和片段
class ChooseYourHoroscope : Fragment()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View?
val view = inflater.inflate(R.layout.fragment_welcome_old, container, false)
return view;
fun clickItemHoro(v: View?)
Log.e("clickItemHoro", v!!.tag.toString())
当我点击按钮时出现错误:
在父级或祖先级中找不到方法 clickItemHoro(View) android:onClick 属性的上下文在视图类上定义 android.support.v7.widget.AppCompatImageView 与 id 'aries'
为什么会这样?代码很简单,但它不起作用,我不明白为什么
【问题讨论】:
Kotlin 在 xml onClick 中不起作用 ...它在 Java 中也不起作用 ...在父或祖先上下文中 .. . 片段是上下文吗? 我明白了,坦克! http://***.com/questions/14139774/android-app-crashing-fragment-and-xml-onclick 参考这个链接说。 【参考方案1】:尝试使用 Kotlin Extensions 插件,它应该可以工作。
在 build.gradle (app) 添加apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
然后在 MainActivity.kt 中导入它
import kotlinx.android.synthetic.main.activity_main.*
【讨论】:
我仍然在 3-6-18 的最新版本中遇到这个问题,但我在 Android Studio 中看不到它——我在使用 ./gradlew 构建时看到它命令行。我有插件、导入、Manifest.xml 工具:上下文行,所有这些。奇怪的是,即使 lint 告诉我它失败了,我的输出文件夹中仍然有一个 .apk。在 lint 领域可能存在一些脱节?由于在 Android Studio 中构建时不会真正发生 lint...【参考方案2】:应用插件:'kotlin-android-extensions' 必须使用 kotlin 扩展然后才能工作
【讨论】:
【参考方案3】:如上所述,添加 Kotlin 扩展是一个好主意,此外,您可以直接在代码中在 ImageView
上设置 onClickListener,而不是在 xml 文件中声明方法:onClick
:
aries.setOnClickListener doSomething()
【讨论】:
【参考方案4】:在 Gradle 文件中添加
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
然后添加活动
import kotlinx.android.synthetic.main.activity_main.*
【讨论】:
我仍然在 3-6-18 的最新版本中遇到这个问题,但我在 Android Studio 中看不到它——我在使用 ./gradlew 构建时看到它命令行。我有插件、导入、Manifest.xml 工具:上下文行,所有这些。奇怪的是,即使 lint 告诉我它失败了,我的输出文件夹中仍然有一个 .apk。在 lint 领域可能存在一些脱节?由于在 Android Studio 中构建时不会真正发生 lint...【参考方案5】:根据上述答案和 cmets 在此处发布完整的解决方案,以便对其他人有所帮助。
首先从ImageView的xml代码中删除android:onClick
属性。
然后修改片段代码如下:
class ChooseYourHoroscope : Fragment()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View?
val view = inflater.inflate(R.layout.fragment_welcome_old, container, false)
val aries = view.findViewById<ImageView>(R.id.aries)
aries.setOnClickListener
//Write ur action here
return view;
【讨论】:
以上是关于xml onClick 中的 Kotlin 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
通过 XML HttpRequest 加载时 OnClick() 函数不起作用