2016-11-30 4 views
1

Ich lerne kotlin, und jetzt für mich nicht cearly ein Moment. Ich habe xmlKotlin in xml onClick funktioniert nicht

<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" /> 

und Fragment

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()) 
    } 

} 

wenn i-Taste klicken Ich habe Fehler:

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'

warum es passiert? Code variieren einfach, aber es funktioniert nicht, ich kann nicht verstehen, warum

+2

* Kotlin in xml onClick nicht funktioniert * ... es in Java nicht funktionieren würde, auch ... * in einem Elternteil oder einen Vorfahren Context * ... ist Fragment eines Context? – Selvin

+0

ich verstand, Panzer! – 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) ref diese Verbindung sagte. – Jacob

Antwort

1

Versuchen Sie, Kotlin Extensions Plugin verwenden, sollte es funktionieren.

in build.gradle (app) hinzufügen apply plugin: 'kotlin-android-extensions'

apply plugin: 'com.android.application' 
apply plugin: 'kotlin-android' 
apply plugin: 'kotlin-android-extensions' 

importieren es dann in MainActivity.kt

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

Ich bekomme immer noch dieses Problem mit der neuesten Version von alles von 3-6-18, aber ich sehe es nicht in Android Studio - ich sehe es beim Erstellen mit ./gradlew auf der Kommandozeile. Ich habe die Plugins, den Import, die Manifest.xml-Tools: Kontextlinie, alles davon. Die seltsame Sache ist, ich bekomme immer noch eine .apk in meinem Ausgabeordner, obwohl Lint sagt mir, dass es fehlgeschlagen ist. Es gibt vielleicht eine Trennung im Flusenbereich? Seit Lint passiert nicht wirklich beim Bauen in Android Studio ... – Bungles

1

anwenden Plugin: 'Kotlin-android-Erweiterungen' müssen Sie dann mit Kotlin extenstion es wird funktionieren

0

In Gradle-Datei hinzufügen

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

fügen Sie dann Aktivität

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

Ich bekomme immer noch dieses Problem mit der neuesten Version von allem ab 3-6-18, aber ich sehe es nicht in Android Studio - ich sehe es Beim Erstellen mit ./gradlew auf der Befehlszeile. Ich habe die Plugins, den Import, die Manifest.xml-Tools: Kontextlinie, alles davon. Die seltsame Sache ist, ich bekomme immer noch eine .apk in meinem Ausgabeordner, obwohl Lint sagt mir, dass es fehlgeschlagen ist. Es gibt vielleicht eine Trennung im Flusenbereich? Da beim Android-Studio-Aufbau nicht wirklich Flusen vorkommen ... – Bungles

0

Wie oben erwähnt ist es eine gute Idee ist, die Kotlin Erweiterungen hinzufügen, zusätzlich können Sie eine OnClickListener auf dem ImageView direkt im Code festgelegt, anstatt die Methode in Ihrer XML-Dateien zu erklären: onClick:

aries.setOnClickListener { doSomething() }