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

리스트뷰 안에 있는 TextView 관련 질문입니다.

–1 추천

현재 activity_third_detail이라는 xml파일에 TextView가 몇개 있구요.

그 안에 리스트뷰가 있는데 이 리스트뷰의 어댑터는 activity_third_detail_list.xml파일을 사용해서

setAdapter가 되어있습니다. 데이터도 잘 가져오고 하는데 제가 디테일 파일의 TextView의 width값을

가져와서 리스트 파일에 있는 TextView를 setWidth를 하려고 합니다.

예외가 뜨는 로그내용은 이렇습니다.

04-11 15:35:46.422 15651-15651/com.howbuild.gcm W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setWidth(int)' on a null object reference
04-11 15:35:46.422 15651-15651/com.howbuild.gcm W/System.err:     at com.howbuild.gcm.activity.ThirdDetailActivity$HttpRequestAsync.onPostExecute(ThirdDetailActivity.java:182)
04-11 15:35:46.422 15651-15651/com.howbuild.gcm W/System.err:     at com.howbuild.gcm.activity.ThirdDetailActivity$HttpRequestAsync.onPostExecute(ThirdDetailActivity.java:71)

리스트뷰 안에 있는 리스트 xml의 위젯 아이디를 findViewById를 할 수 없어서 그러는 것 같은데요.

이거는 ListView안에 있는 TextView 여기서 id대입하는 방법을 모르겠습니다.
processCategory = (TextView) findViewById(R.id.processCategory);
processProduct = (TextView) findViewById(R.id.processProduct);
processSize = (TextView) findViewById(R.id.processSize);
processBuilding = (TextView) findViewById(R.id.processBuilding);
processFloor = (TextView) findViewById(R.id.processFloor);
processPosition = (TextView) findViewById(R.id.processPosition);
processAddBtn = (Button) findViewById(R.id.processAddBtn);

이거는 위에 있는 TextView를 setWidth하는 곳
processCategory.setWidth(categoryHeader.getWidth());
processProduct.setWidth(productHeader.getWidth());
processSize.setWidth(sizeHeader.getWidth());
processBuilding.setWidth(buildingHeader.getWidth());
processFloor.setWidth(floorHeader.getWidth());
processPosition.setWidth(positionHeader.getWidth());
processAddBtn.setWidth(addHeader.getWidth());

위에 코드에서 보면 알 수 있듯이 setWidth에서 오류가 나는데요.

로그를 찍어보니 null값이라서 그런다는건 알았습니다.

근데 리스트뷰의 안에 있는 TextView에 어떻게 지정해줘야 할지 모르겠습니다.

 

브레인토스트 (880 포인트) 님이 2016년 4월 11일 질문

2개의 답변

0 추천
이게 adapter에서 사용하는 코드인가요?

보통 adapter에서 사용할때는 getView에서 View convertView를 파라미터로 받습니다.

그러면 convertView.findViewById로 사용하시면 됩니다.

그냥 findViewById는 Activity를 상속받아서 사용할때 그냥 사용하는것 입니다.

특정 뷰안의 Id를 찾을때는 view.findViewById를 사용하셔야 합니다.
캬옹이 (37,920 포인트) 님이 2016년 4월 11일 답변
adapter는 아니구요. 어뎁터는 심플어뎁터로 Activity클래스파일안에서 지금 사용하고 있습니다. 저 코드들은 Activity의 inner클래스인 asynctask의 onpostexecute에서 쓰여지고있습니다.
0 추천
원하시는 리스트뷰 내부의 TextView로의 접근을 하려면 SimpleAdapter가 아닌 CustomAdapter를 사용하셔야 하며 해당 예제는 구글에 검색하면 매우 많이 나옵니다.

리스트뷰 사용시 커스텀 Adapter는 필수라고 볼 수 있을정도로 중요한 부분이므로 여러 예제를 보고 공부하시는 것이 좋을것 같네요.
이카르테 (3,570 포인트) 님이 2016년 4월 12일 답변
...