안드로이드 개발 질문/답변
(글 수 45,052)
int j = 0;
String[] bItem = new String[array_list.getAdapter().getCount()];
for(int i=0; i < array_list.getAdapter().getCount(); i++){
if(((CheckBox)array_list.getChildAt(i).findViewById(R.id.del_ck)).isChecked()) {
bItem[j++] = ((TextView)array_list.getChildAt(i).findViewById(R.id.id_text)).getText().toString();
}
}
i가 9가 되면
if(((CheckBox)array_list.getChildAt(i).findViewById(R.id.del_ck)).isChecked()) {
에서
java.lang.NullPointerException 가 납니다.
원인을 도저히 모르겠습니다.
고수분들 도움 부탁드립니다.
참고로 listbox 갯수는 20개이고
array_list.getAdapter().getCount() 값은 20입니다.
2012.05.11 17:40:28
현재 저도 고민하는 것인데요. array_list가 listView 겠지요? 안드로이드의 listview의 getview 시 rycicle이 되는 형식으로 구조화 되어있습니다.
무슨 말이냐하면 한화면에 보여줄수있는 listview만 그려주고 스크롤시 다음화면부터는 사라지는 - 이라고 표현하겠습니다. 사라지는 listview를 가져다가 다시 사용합니다.
예를 들어보겠습니다. listview count가 20개 있습니다. 하지만 화면에 그려줄수있는 갯수는 4개라고 한다면.
일단 4개부터 그려준후에 스크롤로 아래로 내릴때 위에 1번째 화면이 rycicle 되면서 5번째로 붙는 것입니다.
안드로이드의 listview는 이런형식으로 되어있습니다.
따라서 카운드수를 구해서 포문을 돌리면 널포인트 에러가 뜨는것입니다. 그려진것은 4개뿐인데 5번째부터 없는데 말입니다.
포문돌리면서 i 로그로 찍어보시면 아실것입니다.
체크박스가 체크된 리스트뷰의 텍스트 값을 가져오는 문장인듯한데.. 다른 방법을 강구하셔야할듯합니다.
adapter부분에서 수정을 해주어야합니다. 저또한 지금 열심히 수정중입니다. 체크박스 show/hide는 하였고 이제 체크 이벤트 구현하면 되겠네요. 홧팅합시다!




현재 보여지고 있는 child중에서 i번째입니다.
i의 max값은 ListView.getChildCount()가 되겠구요.
다른 방법을 찾으셔야 할 듯 합니다.