마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

ArrayAdapter requires the resource ID to be a TextView 오류 발생

0 추천
ArrayAdapter requires the resource ID to be a TextView 앱을 실행하면 오류가 발생합니다...

정확히 어느 부분 때문에 나오는지 모르겠습니다..

(독학이라 어렵네요 ..)

도와 주시면 감사하겠습니다 도와주세요 ㅜㅜㅠ

전체 코드와 로그캣은 댓글 확인 부탁드립니다!
(330 포인트) 님이 2021년 6월 28일 질문
문제는 님의 레이아웃 XML 파일에 있습니다. TextView를 사용하셔야 하고 id를 지정해주셔 한다는게 에러메세지의 의미입니다.
ArrayAdapter<WorkList> Adapter = new ArrayAdapter<WorkList>(this , activity_list_item, workList);

이거를
 
ArrayAdapter<WorkList> Adapter = new ArrayAdapter<WorkList>(this , activity_list_item, R.id.main_ScrollList, workList);

이렇게 바꿔줬는데도 오류가 나네요 혹시 뭔지 알 수 있을까요??..
로그캣의 오류 내용

java.lang.RuntimeException: Failed to find view with ID com.example.mywork:id/main_ScrollList in item layout

2개의 답변

+1 추천
 
채택된 답변

아무리 뛰어난 개발자가 있더라도 정확하게 아는 에러메세지는 아주 한정적입니다. 대부분은 에러로그, 디버그, 관련 문서 등을 통해 찾아나게 됩니다. 님이 해보셔야 할 것은 ArrayAdapter가 어떻게 사용되어야 하는지 확인해 보는 겁니다. 이슈가 ArrayAdapter 의 생성자 사용법에 있기 때문에 관련 API를 확인하시는 것 부터 해보시는 게 좋습니다.

https://developer.android.com/reference/android/widget/ArrayAdapter

ArrayAdapter(Context context, int resource)

ArrayAdapter(Context context, int resource, int textViewResourceId)

ArrayAdapter(Context context, int resource, T[] objects)

ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)

ArrayAdapter(Context context, int resource, List<T> objects)

ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

 

위에 나온 게 모든 ArrayAdapter가 가질 수 있는 생성자의 형태입니다. 변수이름들을 잘 보시구요, 좀 더 디테일한 의미는 문서에서 직접 확인해 보세요.

문제는 님의 코드에는 위에서 언급된 생성자에 적합한 형태가 없다는 것입니다. 만약 제가 말씀드리는게 이해가지 않으시다면, 자바를 좀 더 들여다 보신 후에 진행하시는 것이 좋을 것 같습니다.

인자가 4개 들어가는 생성자는

ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)
ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

위의 두개입니다.

둘다 세번째 인자는 TextView의 ID입니다. 왜냐하면 ArrayAdapter가 내부적으로 이 TextView를 찾아서 처리를 해줄 것이기 때문입니다. 근데 main_ScrollList는 ListView예요. 

mainScrollList.setAdapter(new ArrayAdapter(...))

main_ScrollList는 Adapter를 할당해야 하는 ListView입니다. 아이템의 내용을 그려주어야하는 TextView가 아니예요.

참고로, ArrayAdapter의 설명을 읽어보면 ListView나 Spinner를 만들 때 사용한다고 되어 있습니다. ListView는 성능상의 문제 등으로 요즘은 사용하는 사람이 거의 없는 View입니다. 대부분의 개발자들은 RecyclerView를 사용합니다.

spark (230,130 포인트) 님이 2021년 6월 30일 답변
님이 2021년 6월 30일 채택됨
자세한 설명 너무 감사합니다 ㅠㅠ!!
0 추천

Caused by: java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView

캐스팅 잘못하신듯

show7777 (1,170 포인트) 님이 2021년 6월 28일 답변
...