2017-10-25 3 views
0

상위 뷰를 팽창시킨 후 TextView Null. 나는이 레이아웃의 수를 팽창 루프 실행 해요 : 당신은 당신의 코드에서 어디 findViewById()를 사용하지 않는TextView 상위 레이아웃을 팽창시킨 후 Null

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

스택 트레이스

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

내 대답을 시도하고 작동하는지 확인하십시오. – Mauker

답변

1

합니다. 대신 일을 :

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

을하거나 TextView에 해당 ID 당신이 사용하려는 :

var thetitle = infv.tck_event_title 

이보십시오.

또한 각 루프에 새로운 LayoutInflater을 생성합니다. 이 코드 행 :

var inf1:LayoutInflater = LayoutInflater.from(context) 

정말 루프 외부이어야한다 (심지어 대신 varval 될 수 있습니다).

편집 : Kotlin Android 확장 프로그램을 사용하려는 경우 this answer을 확인하는 것이 좋습니다. 뭔가를 가져 오는 것을 잊어 버렸을 수도 있습니다.

+0

무슨 일이 있었는지 안드로이드 스튜디오는 내 사용자 정의 레이아웃 이름을 일반 Textview7/8 등으로 되돌려 놓았습니다. GUI는 내 사용자 정의 이름을 보여 주지만 장면 뒤에있는 XML은 일반 이름을 표시하고있었습니다. 개발자에게 버그로보고했습니다. – BostonMacOSX

+0

아, 알겠습니다. 그래서 실제로 Kotlin Android 확장 기능을 사용하고있었습니다. 당신이 그것을 알아 냈기 때문에 기쁘다 :) (그러나 루프 밖에서 인플레이 터를 만드는 것을 잊지 마라!) – Mauker

+0

예. 그렇습니다. 몇 주 전에 개발을 배우기 시작 했으므로 Kotlin에서 바로 시작하기로 결정했습니다. – BostonMacOSX

0

정말로 그렇지 않고 원래 코드가 작동하지 않으면 대답하십시오.

안드로이드 스튜디오는 내 사용자 정의 레이아웃 이름을 일반적인 Textview7/8 등으로 되돌려 놓았습니다. GUI는 내 사용자 정의 이름을 보여 주지만 장면 뒤에있는 XML은 일반 이름을 표시하고있었습니다. 개발자에게 버그로보고했습니다.

관련 문제