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

sqlite listview 데이터 삭제시 목록 사라짐

0 추천

제목 그대로에요~ 데이터베이스 커스텀 리스트뷴데요 슬라이드해서 삭제해줄때

목록 10개 있다고 가정하면요 하나 삭제하면 화면에 목록이 다 없어져요 그리고 다시 다른 액티비티를 갔다가 오면

하나 지워진 9개가 보이구요

또 9개에서 하나지우면 다 없어지고 나갔다 오거나 리스트뷰를 추가시키면 다 잘 보입니다 어디가 문제 인지 잘 모르겠어요!

 

 

나는안드로오 (960 포인트) 님이 2014년 8월 13일 질문
아래는 코드입니다!

public class FavoriteActivity extends Activity {



public static ListView list;

public static ArrayList<FavoriteFile> arSrc;

public static FavoriteDBHelper dbHelper;

public static ListAdapter adapter;



/** Called when the activity is first created. */



public  void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.favorite_main);



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

dbHelper = new FavoriteDBHelper(this);



Log.i("mylog", "onCreate");

FavoriteFile item1 = null;





Log.i("mylog", "for");

arSrc = FavoriteDB.selectAllFile(dbHelper);



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

list.setAdapter( adapter );



list.setOnItemClickListener(new OnItemClickListener() {



    @Override

    public void onItemClick(AdapterView<?> parent, View v, int position, long id){

      FavoriteFile mData = adapter.arSrc.get(position);

        Toast.makeText(FavoriteActivity.this, mData.fileName, Toast.LENGTH_SHORT).show();

        WebViewActivity.webUrl=mData.favUrl;

        Intent myIntent = new Intent(FavoriteActivity.this,WebViewActivity.class);

startActivity(myIntent);

    }

});





SwipeDismissListViewTouchListener touchListener =

                new SwipeDismissListViewTouchListener(list,

                        new SwipeDismissListViewTouchListener.DismissCallbacks() {

                            @Override

                            public boolean canDismiss(int position) {

                                return true;

                            }



                            @SuppressLint("NewApi")

@Override

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

                                for (int position : reverseSortedPositions) {

                                    adapter.arSrc.remove(adapter.getItem(position));

                                    arSrc = FavoriteDB.selectAllFile(dbHelper);

                                    arSrc.clear();

                                    FavoriteDB.deleteFile(position,dbHelper);

                                }

                               

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

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

                      adapter.notifyDataSetChanged();

                      list.setAdapter( adapter );

           

                            }

                        });

        list.setOnTouchListener(touchListener);

        // Setting this scroll listener is required to ensure that during ListView scrolling,

        // we don't look for swipes.

        list.setOnScrollListener(touchListener.makeScrollListener());

       

       

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

//         dbHelper = new FavoriteDBHelper(this);

//            adapter=new ListAdapter( getBaseContext(), R.layout.favorite_list_view_layout , arSrc );

// list.setAdapter( adapter );



}
이건 데이터 삭제 함수에요~~

public static void deleteFile( int position, FavoriteDBHelper dbHelper ){
   
        ArrayList<FavoriteFile> list = null;
        Cursor cs = null;
        SQLiteDatabase db = dbHelper.getReadableDatabase();
        list = new ArrayList<FavoriteFile>();
        String sq = "SELECT * FROM file2";
        cs = db.rawQuery( sq , null );
       
       
        cs.moveToPosition(position);
        int id=cs.getInt(0);
       
        StringBuilder sql = new StringBuilder("DELETE FROM file2 WHERE _id="+id+";");
       
        //FavoriteActivity.arSrc.clear();
       
       
       
//        while (cs.moveToNext()) {
//            FavoriteFile item = new FavoriteFile( R.drawable.icon, cs.getString(1), cs.getString(2) + "" );
//            list.add(item);
//        }
        //FavoriteActivity.arSrc.clear();
        //FavoriteActivity.adapter.notifyDataSetChanged();
       
        Log.i("mylog", sql.toString());
        db.execSQL( sql.toString() );
       
        db.close();
    }
클리어하셔서 그런 듯..그거 주석하고 다시 디버깅해보세요..

1개의 답변

0 추천

  arSrc.clear();

 

다 삭제하시고 다시 그걸 붙이시니 내용이 없어서 사라져보이게죠 모

건방진프로그래머 (26,630 포인트) 님이 2014년 8월 13일 답변
저거 주석처리하고 하면 데이터베이스는 지워지는데 목록은 그대로 남아있어요 그리고 목록 5개있다치면 5개 다 지우면 오류나면서 꺼지구요 한마디로 갱신이 잘 안되요
adapter.notifyDataSetChanged();
이거 넣었는데도 갱신이 안되네요
...