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

SQlite 커스텀 리스트뷰 getFilter 사용후 데이타 삭제

0 추천

암걸릴것 같습니다 도와주세요ㅜㅜㅜ

바로 아래 그림처럼 구현했습니다.'나'와'사이트주소'는 sqlite데이타베이스에 저장하고 

list = (ListView) findViewById( R.id.file_list );

dbHelper = new FavoriteDBHelper(this);

arSrc = FavoriteDB.selectAllFile(dbHelper);

adapter=new ListAdapter( this, R.layout.favorite_list_view_layout , arSrc, null );

list.setAdapter( adapter );

이런식으로 뿌려줍니다

그리구 삭제는

SwipeDismissListViewTouchListener touchListener =

                new SwipeDismissListViewTouchListener(list,

                        new SwipeDismissListViewTouchListener.DismissCallbacks() {

                            @Override

                            public boolean canDismiss(int position) {

                                return true;

                            }

                            @Override

                            public void onDismiss(ListView list, int[] reverseSortedPositions) {

                                for (int position : reverseSortedPositions) {

                                adapter.arSrc.remove(position);

                                    FavoriteDB.deleteFile(position,dbHelper);

                                }

                                adapter.notifyDataSetChanged();

                            }

                        });

        list.setOnTouchListener(touchListener);

        list.setOnScrollListener(touchListener.makeScrollListener());

}

빨간색 줄 친것처럼 어댑터에서 지워주고 DB도 지워집니다 그러나 문제는 

 

아래그림처럼 '하'라고 검색하고 

@Override

public boolean onQueryTextChange(String newText) {

adapter.getFilter().filter(newText.toString());

return false;

}

private class ListFilter extends Filter {

@Override

protected FilterResults performFiltering(CharSequence constraint) {

FilterResults results = new FilterResults();

if (constraint == null || constraint.length() == 0) {

results.values = OriginarSrc;

results.count = OriginarSrc.size();

}

else {

ArrayList<FavoriteFile> nListDataList = new ArrayList<FavoriteFile>();

for (FavoriteFile p : arSrc) {

if (p.getFileName().toUpperCase().indexOf( constraint.toString().toUpperCase() ) >= 0 )

nListDataList.add(p);

}

results.values = nListDataList;

results.count = nListDataList.size();

}

return results;

}

@Override

protected void publishResults(CharSequence constraint,

FilterResults results) {

if (results.count == 0){

notifyDataSetInvalidated();

arSrc = FavoriteDB.selectAllFile(FavoriteActivity.dbHelper);

FavoriteActivity.list.setAdapter( FavoriteActivity.adapter );

}

else {

arSrc = (ArrayList<FavoriteFile>) results.values;

notifyDataSetChanged();

}

}

}

아래 그림처럼 나옵니다 그리고 저 '하'를 지우면 위의 1번그림의 '나'가 지워지고 '하'는 그대로 잇습니다

어떻게 생각하면 1번값을 지우니깐 당연히 첫번째 값이 사라지는게 당연하데 커서값으로도 잘 못찾겠고 

리스트가 필터링되도 고유의 위치값을 알 수 없을까요?

나는안드로오 (960 포인트) 님이 2014년 9월 14일 질문

1개의 답변

+2 추천
 
채택된 답변
FavoriteDB.deleteFile(position,dbHelper);

왠지 이 부분이 문제 같은데, position은 db의 row id가 아닙니다.

row id 삭제하면 제대로 지워질 것 같습니다 

 

 

그리고 소스를 붙여넣을 때는 글에 소스 코드 보기 좋게 넣는 법 이 글의 방법을 적용해서 답변할 사람들이 편하게 보게 해줘야합니다. 돈받고 하는 것도 아니고 자원봉사로 해주는건데, 소스를 저렇게 붙여놓으면 답변해줄 마음이 안 생깁니다. 그나마 이 질문은 좀 쉬워보여서 답변한거고, 좀만 어려워보이는 질문에 소스 표시가 이상하게 되어있으면 아예 질문 내용을 읽지도 않고 넘어가는 사람도 아주 많습니다. 

쎄미 (162,410 포인트) 님이 2014년 9월 15일 답변
나는안드로오님이 2014년 9월 17일 채택됨
아!ㅜㅜ정말 죄송합니다 저 여기서 질문 꽤 많이하는데 미처 그 생각을 못했네요ㅜㅜㅜ나름 보기편하시라고 밑줄도 치고 그런건데ㅠ다른글 찾아보니깐 코드보는 것처럼 보기쉽게 해놓는 방법이 있는지 몰랐습니다 ㅜㅜㅜㅜ다시한번 죄송합니다 앞으로 안그럴께요,,,답변은 정말 감사합니다. 제가 아직 너무 초보라 무료로 답변해주시는 분들은 그 고통이 얼마나 힘든줄 알기때문에 도와주시는 거겠죠? 정말 다시한번 감사드립니다!
...