2016-11-30 51 views
1

我在学习kotlin,现在对我而言,暂时还没有一段时间。我有XMLxot onClick中的Kotlin无法正常工作

<ImageView 
        android:id="@+id/aries" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        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()) 
    } 

} 

当我点击按钮,我有错误:

Could not find method clickItemHoro(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatImageView with id 'aries'

为什么会发生?代码变化很简单,但它不工作,我不明白为什么

+2

*科特林在XML中的onClick不行* ......它不会在Java中工作,太... *在父母或祖先上下文* ...是片段的背景? – Selvin

+0

我明白了,坦克! – g71132

+0

[http://stackoverflow.com/questions/14139774/android-app-crashing-fragment-and-xml-onclick](http://stackoverflow.com/questions/14139774/android-app-crashing-fragment-and -xml-onclick)参考这个链接说。 – Jacob

回答

1

尝试使用Kotlin扩展插件,它应该工作。

中的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.* 
+0

我仍然在3-6-18版本中看到所有内容的最新版本,但是我没有在Android Studio中看到它 - 我在命令行上用./gradlew构建时看到它。 我有插件,导入,Manifest.xml工具:上下文行,所有它。 奇怪的是我仍然在我的输出文件夹中得到一个.apk,即使lint告诉我它失败了。 也许在皮棉领域有一些脱节?由于lint在Android Studio中建立时并不真正发生...... – Bungles

1

应用插件: '科特林-Android平台的扩展' 必须使用科特林extenstion然后它会工作

0

在Gradle文件中添加

apply plugin: 'kotlin-android' 
apply plugin: 'kotlin-android-extensions' 

然后活动添加

import kotlinx.android.synthetic.main.activity_main.* 
+0

我仍然会在3-6-18版本中看到所有内容的最新版本,但我在Android Studio中看不到它 - 我看到它在命令行上使用./gradlew进行构建时。 我有插件,导入,Manifest.xml工具:上下文行,所有它。 奇怪的是我仍然在我的输出文件夹中得到一个.apk,即使lint告诉我它失败了。 也许在皮棉领域有一些脱节?由于在Android Studio中构建时lint不会真的发生...... – Bungles

0

正如上面提到它添加科特林扩展一个不错的主意,另外,你可以直接在你的代码上ImageView设置onClickListener,而不是在你的XML文件中声明的方法: onClick

aries.setOnClickListener { doSomething() }