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

리스트뷰(ListView) 갱신이 되지 않는데 이유좀 알려주세요..

0 추천

리스트뷰에서 해당 row를 삭제하고 

adapter.notifyDataSetChanged();하면 맨 마지막 row는 정상적으로 갱신이 되서 사라지는데

그외에 row들은 사라지지 않은채 남아 있습니다.

그 상태에서 스크롤시

 java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2

요렇게 에러나 나와버리네요;;
 
당최 이유를 알 수가 없네요. 아시는분 왜 그런지 설명좀 해주세요.
 
DBHelper dbh = null;
SQLiteDatabase db = null;

try {
//삭제
dbh = new DBHelper(getApplicationContext());
db = dbh.getWritableDatabase();
db.delete(Constants.SQLITE_DB_NAME, "_id=?", new String[]{mAlarmId+""});

for(MenuPrefAlarmBeen item : alarmBeenList){
        if(item.getId() == Integer.parseInt(mAlarmId)){
	      alarmBeenList.remove(item);
	     mMenuPrefAlarmAdapter.removeItem(item);
	}
}

mMenuPrefAlarmAdapter.notifyDataSetChanged();

 

 

초보개발자_태훈 (120 포인트) 님이 2013년 6월 24일 질문

2개의 답변

+1 추천

IndexOutOfBoundsException는 말그대로 ArrayList의 사이즈보다 높은 값을 지우거나 불러오려 할 때 나는 에러입니다. 해당 인덱스의 데이터를 지우고 있는지 확인하시는게 빠를 것 같습니다.

BigStarK (540 포인트) 님이 2013년 6월 24일 답변
0 추천
cursoradapter 는 우선 cursor 부터 바꿔줘야 합니다. 다시 쿼리를 날려서 결과로 받은 cursor를 아답터의 changecursor 로 바꿔주고 나서 notifydatasetchanged 를 불러주셔야합니다.
엥꼬 (1,170 포인트) 님이 2013년 6월 24일 답변
...