2017-10-25 3 views
0

TextView Null nach dem Aufblasen des übergeordneten Layouts. Ich bin mit einer Schleife, die eine Anzahl dieser Layouts aufbläst:TextView Null nach dem Aufblasen des übergeordneten Layouts

for(i in ticketAr?.indices!!){ 

    var inf1:LayoutInflater = LayoutInflater.from(context) 
    var infv:View = inf1.inflate(R.layout.ticket_individual,null,false) 
    infv.setId(parseInt(ticketAr[i].string("ntb_id"))) 
    var thetitle = infv.tck_event_title 
    thetitle.setText(ticketAr[i].string("age_group_desc")) 
} 

STACKTRACE

10-25 09:30:35.839 11549-11549/com.example.xx.listview 
E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.example.xx.listview, PID: 11549 
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 

    at 
com.example.xx.listview.Ordering_Setup$getData$1.invoke(Ordering_Setup.kt:145) 
    at 
com.example.xx.listview.Ordering_Setup$getData$1.invoke(Ordering_Setup.kt:29) 
    at 
com.github.kittinunf.fuel.core.DeserializableKt$response$1.invoke(Deserializable.kt:37) 
    at 
com.github.kittinunf.fuel.core.DeserializableKt$response$1.invoke(Deserializable.kt) 
    at 
com.github.kittinunf.fuel.core.DeserializableKt$response$5$1.invoke(Deserializable.kt:62) 
    at 
com.github.kittinunf.fuel.core.DeserializableKt$response$5$1.invoke(Deserializable.kt) 
    at 
com.github.kittinunf.fuel.core.Request$callback$1.run(Request.kt:225) 
    at android.os.Handler.handleCallback(Handler.java:751) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6077) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 
+0

Versuchen Sie meine Antwort und sehen, ob es funktioniert. – Mauker

Antwort

1

Sie sind nicht findViewById() überall in Ihrem Code verwenden. Statt tun:

var thetitle = infv.tck_event_title 

Try this:

var thetitle = infv.findViewById(R.id.tck_event_title) as TextView 

oder das Äquivalent ID dieses TextView sind Sie zu verwenden versuchen.

Sie erstellen auch eine neue LayoutInflater für jede Schleife. Diese Codezeile:

var inf1:LayoutInflater = LayoutInflater.from(context) 

wirklich Sollte außerhalb der Schleife sein (und kann sogar ein val anstelle eines var sein).

Bearbeiten: Wenn Sie versucht haben, die Kotlin Android Extensions zu verwenden, schlage ich vor, dass Sie this answer überprüfen. Sie haben vielleicht vergessen, etwas zu importieren.

+0

Was passiert ist, ist, dass Android Studio meine benutzerdefinierten Layout-Namen auf den generischen Textview7/8 usw. zurückgesetzt hat. Die GUI zeigte meine benutzerdefinierten Namen, aber der XML-Code hinter den Kulissen zeigte die generischen Namen. Hat es dem Entwickler als Fehler gemeldet – BostonMacOSX

+0

Oh, ich verstehe. Sie haben also die Kotlin Android Extensions benutzt. Gut zu wissen, dass du es herausgefunden hast :) (Aber vergiss nicht, den Inflater außerhalb der Schleife zu erstellen!) – Mauker

+0

Ja, ich war. Ich habe erst vor ein paar Wochen mit der Entwicklung angefangen, also habe ich beschlossen, gleich mit Kotlin anzufangen – BostonMacOSX

0

Nicht wirklich und antworte anders als der ursprüngliche Code funktioniert.

Was war passiert ist, dass Android Studio meine benutzerdefinierten Layout-Namen auf die generische Textview7/8 etc. zurückgesetzt hat. Die GUI zeigte meine benutzerdefinierten Namen, aber die XML hinter den Kulissen zeigte die generischen Namen. Hat es dem Entwickler als Fehler gemeldet

Verwandte Themen