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

파일입출력 리스트뷰 아이템 삭제할 때요...

0 추천
안녕하세요!

 

리스트뷰 추가하면 아이템 등록이 되잖아요.

근데 문제가 있어요.

 

1

2

3

4

 이렇게 리스트뷰 아이템을 추가했다고 가정합시다.

여기에서 2 3 을 지웠으면

1

4

 가 되죠.. 여기에서 파일입출력으로 아이템 추가하면

1

5

4

 이렇게 되요. 또 추가하면

1

5

6

4

 또 추하가면

1

5

6

4

7

 이렇게 되버려요 ㅠㅠㅠ

삭제된 부분을 빈공간이 생겨서 추가하면 거기에 추가하는데 다채우면 7부터 정상적으로 출력되요..

소스 보여드릴께요.

리스트뷰 다중 체크후 삭제하는 소스에요.

public void delete(){
  File file = new File(path);
  File[] files = file.listFiles();
  SparseBooleanArray sb = listview.getCheckedItemPositions();
  if(sb.size() !=0 ){
   for(int i = listview.getCount()-1; i>=0; i--){
    if(sb.get(i)){
     list.remove(i);
     files[i].delete();
    }
    
   }
   Toast.makeText(this, "선택된 파일을 삭제했습니다.", Toast.LENGTH_SHORT).show();
  }
  else {
   Toast.makeText(this, "삭제 파일이 없습니다.", Toast.LENGTH_SHORT).show();
  }
  listview.clearChoices();
  adapter.notifyDataSetChanged();
 }

 

이번엔 단일삭제 소스에요.

public void delete(){
  Intent intent2 = new Intent(this, MemoList.class);
  File del = new File(path+a);
  del.delete();
  intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  startActivity(intent2);
  finish();
 }

 이 소스 외에는 다른 문제가 있을까요?

어떻게 해야 빈공간을 지울 수 있을까요?
성수소년 (550 포인트) 님이 2015년 10월 10일 질문

1개의 답변

0 추천
어댑터의 내부에 arraylist로 구성하세요. java의 경우에, arraylist 와 linkedlist 를 쓰는게 array보다 훨씬 낫습니다. 추가 삭제가 많다면 linkedlist가 유용하며, 배열의 빠른 검색 기능이 중요하다면 arraylist가 훨씬 낫습니다만, arraylist의 경우, 추가 삭제가 이뤄질때마다 임시배열을 만들어서 복사하는 방식으로 내부적으로 동작하므로, 메모리 낭비가 있을 수 있습니다.
길버트공원 (1,720 포인트) 님이 2015년 10월 10일 답변
...