이번 시간에는 이전에 이어서 연락처
삭제하는 방법에 대하여 알아보겠습니다.
이전 포스팅을 먼저 보시고 오시면 됩니다.
2022.03.02 - [안드로이드] - [안드로이드] SQLite RecyclerView 연락처 만드는 방법 part1 - 조회
2022.03.03 - [안드로이드] - [안드로이드] SQLite RecyclerView 연락처 만드는 방법 part2 - 등록
2022.03.04 - [안드로이드] - [안드로이드] SQLite RecyclerView 연락처 만드는 방법 part3 - 상세
2022.03.05 - [안드로이드] - [안드로이드] SQLite RecyclerView 연락처 만드는 방법 part4 - 수정
build.gradle(Module:프로젝트명:app)
dependencies 괄호 안에 아래 코드를 넣어주시면 됩니다.
implementation 'it.xabaras.android:recyclerview-swipedecorator:1.4'
setting.gradle
repositories 괄호 안에 아래 코드를 넣어주시면 됩니다.
maven { url 'https://jitpack.io' }
/**
* 연락처 삭제
* @param id 아이디
*/
void deleteData(String id){
SQLiteDatabase db = this.getWritableDatabase();
long result = db.delete(TABLE_NAME, "_id=?", new String[]{id});
if(result == -1){
Toast.makeText(context, "Failed", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(context, "Successfully", Toast.LENGTH_SHORT).show();
}
}
- 추가 -
등록한 라이브러리 recyclerview-swipedecorator를 통해서 recyclerView에 제스처 기능을 추가했습니다.
onSwiped: 제스처에 따른 기능 구현
onChildDraw: 제스처 그림 구현
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
int position = viewHolder.getAdapterPosition();
switch(direction){
case ItemTouchHelper.LEFT:
String deleteId = phoneList.get(position).getPhone_id();
//삭제 기능
phoneList.remove(position);
adapter.removeItem(position);
adapter.notifyItemRemoved(position);
db.deleteData(deleteId);
break;
}
}
@Override
public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
new RecyclerViewSwipeDecorator.Builder(c, recyclerView, viewHolder,
dX, dY, actionState, isCurrentlyActive)
.addSwipeLeftBackgroundColor(Color.RED)
.addSwipeLeftActionIcon(R.drawable.ic_delete)
.addSwipeLeftLabel("삭제")
.setSwipeLeftLabelColor(Color.WHITE)
.create()
.decorate();
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
}).attachToRecyclerView(recyclerView);
아이콘 res -> drawable
- 전체 코드 -
public class MainActivity extends AppCompatActivity {
PhoneBookDB db;
ArrayList<PhoneBook> phoneList = new ArrayList<>();
RecyclerView recyclerView;
PhoneBookAdapter adapter;
TextView noDataText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//이미지 크기 오류 방지
try{
Field field = CursorWindow.class.getDeclaredField("sCursorWindowSize");
field.setAccessible(true);
field.set(null, 100 * 1024 * 1024);
} catch (Exception e) {
e.printStackTrace();
}
//데이터 유무 텍스트
noDataText = findViewById(R.id.noData_text);
//리스트 보여줄 화면
recyclerView = findViewById(R.id.recyclerView);
//어뎁터
adapter = new PhoneBookAdapter(MainActivity.this);
//어뎁터 등록
recyclerView.setAdapter(adapter);
//레이아웃 설정
recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
//DB 생성성
db = new PhoneBookDB(MainActivity.this);
storeDataInArray();
FloatingActionButton addBtn = findViewById(R.id.add_btn);
addBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//등록화면으로 이동
Intent intent = new Intent(MainActivity.this, AddActivity.class);
startActivity(intent);
}
});
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
int position = viewHolder.getAdapterPosition();
switch(direction){
case ItemTouchHelper.LEFT:
String deleteId = phoneList.get(position).getPhone_id();
//삭제 기능
phoneList.remove(position);
adapter.removeItem(position);
adapter.notifyItemRemoved(position);
db.deleteData(deleteId);
break;
}
}
@Override
public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
new RecyclerViewSwipeDecorator.Builder(c, recyclerView, viewHolder,
dX, dY, actionState, isCurrentlyActive)
.addSwipeLeftBackgroundColor(Color.RED)
.addSwipeLeftActionIcon(R.drawable.ic_delete)
.addSwipeLeftLabel("삭제")
.setSwipeLeftLabelColor(Color.WHITE)
.create()
.decorate();
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
}).attachToRecyclerView(recyclerView);
}//onCreate
/**
* 데이터 가져오기
*/
void storeDataInArray(){
Cursor cursor = db.readAllData();
if(cursor.getCount() == 0){
noDataText.setVisibility(noDataText.VISIBLE);
}else{
noDataText.setVisibility(noDataText.GONE);
while(cursor.moveToNext()){
PhoneBook phone = new PhoneBook(cursor.getString(0),
cursor.getString(1),
cursor.getString(2),
cursor.getBlob(3));
//데이터 등록
phoneList.add(phone);
adapter.addItem(phone);
//적용
adapter.notifyDataSetChanged();
}
}
}
}
2022.03.01 - [안드로이드] - [안드로이드] 온보딩(Onboarding) 페이지 쉽게 만드는 방법
2022.02.28 - [안드로이드] - [안드로이드] 알림(Alerter) 쉽게 만드는 방법
2022.02.27 - [안드로이드] - [안드로이드] 이미지(Image) 흐림 효과(Blur) 쉽게 주는 방법
[안드로이드] 달력 (DatePicker) 버튼(Button) 으로 호출하는 방법 (0) | 2022.03.08 |
---|---|
[안드로이드] 버튼이 보라색으로 고정된 상황 쉽게 해결하는 방법 (0) | 2022.03.07 |
[안드로이드] SQLite RecyclerView 연락처 만드는 방법 part4 - 수정 (0) | 2022.03.05 |
[안드로이드] SQLite RecyclerView 연락처 만드는 방법 part3 - 상세 (0) | 2022.03.04 |
[안드로이드] SQLite RecyclerView 연락처 만드는 방법 part2 - 등록 (0) | 2022.03.03 |
댓글 영역