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

밀어서 삭제하기 문의드립니다.

0 추천
package com.example.asdfasdf;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;

public class MainActivity extends Activity {
	Note_DataBase DB;	ListView listView1;	SimpleCursorAdapter adapter;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		DB = new Note_DataBase(this);
		
		listView1 = (ListView) findViewById(R.id.listView1);
		
		RefreshList();
		
		SwipeDismissListViewTouchListener touchListener =
		    new SwipeDismissListViewTouchListener(listView1,
		    new SwipeDismissListViewTouchListener.DismissCallbacks() {
		        @Override
		        public boolean canDismiss(int position) {
		            return true;
		        }
		 
		        @Override
		        public void onDismiss(ListView listView, int[] reverseSortedPositions) {
		            for (int position : reverseSortedPositions) {
		            	del(Note_DataBase.cursor.getInt(0));
		            	Log.d("get", "" + Note_DataBase.cursor.getInt(0));
		            }
		            adapter.notifyDataSetChanged();
		        }
		    });
		listView1.setOnTouchListener(touchListener);
		listView1.setOnScrollListener(touchListener.makeScrollListener());
	}
	
	public void del(long id) {
		DB.DeleteRecord(id);
		RefreshList();
	}
	
	public void button(View v) {
		EditText editText1 = (EditText) findViewById(R.id.editText1);
		DB.InsertRecord(editText1.getText().toString());
		RefreshList();
	}
	
	@SuppressWarnings("deprecation")
	public void RefreshList() {
    	Note_DataBase.cursor = DB.QueryData();
		
		if (Note_DataBase.cursor != null) {
			startManagingCursor(Note_DataBase.cursor);
			String[] columns = {"time", "memo", "day"};
			int[] reIds = {R.id.textView3, R.id.textView2, R.id.textView1};
			
			adapter = new SimpleCursorAdapter
					(this, R.layout.list_item, Note_DataBase.cursor, columns, reIds);	

			listView1.setAdapter(adapter);
		}
	}
}

오픈소스 받아와서 사용합니다.

밀어서 삭제가 되긴 되는데 어느 위치에서든 리스트뷰 아이템을 옆으로 밀면 마지막 id값의 칼럼이 지워집니다... 이유를 도통 모르겠네요 ㅠ

오픈소스를 올려야 될까요? ㅠ

Android초보개발자 (1,230 포인트) 님이 2015년 3월 14일 질문

1개의 답변

0 추천

deleteRecord(id) <- deleteRecord 함수가 어떻게 구현되어있는지 보고 싶네요.

참고로 저 코드를 그냥 순수하게 읽어본 결과, 

ondismiss에서 position이 reversesortedposition 즉 "reverse" 거꾸로라는 의미인데, 그 오픈소스는, 거꾸로 삭제하는 기능을 구현했었나봅니다.

 

deleteRecord쪽 궁금하고,  

del(Note_DataBase.cursor.getInt(0));

여기부분에서, getInt(0)으로 하셨는데, 제가 이게 맞는건지 정확하게 모르겠네요. 왜냐면

getInt(0)이면 0번째 clumn을 가리키고 있는 것인데, 리스트뷰에서 선택되어진 항목쪽이랑 db 순서랑 같다면, getInt(position)으로 해야하는것 아닌가요??

Cursor.getInt(columnIndex)로 알고 잇는데..

 

Djleeee (13,180 포인트) 님이 2015년 3월 16일 답변
public void DeleteRecord(long id) {
        SQL_DB.execSQL("delete from " + TABLE_NAME + " where _id = '" + id + "'");
    }

단순하게 이렇게 생겼습니다 ㅠ
getInt(0)는 _id 값을 가져오기위해서 사용한건데... 사용법이 틀렸던 걸까요?
http://arabiannight.tistory.com/381
이 사이트에서 DB 아주 철저하게 잘 성명해놓았습니다. 한번쯤 봐보세요. 정말 도움이 됩니다.
...