상세 컨텐츠

본문 제목

[안드로이드] SQLite RecyclerView 연락처 만드는 방법 part5 - 삭제

안드로이드

by aries574 2022. 3. 6. 12:02

본문


이번 시간에는 이전에 이어서 연락처

삭제하는 방법에 대하여 알아보겠습니다. 

이전 포스팅을 먼저 보시고 오시면 됩니다.

2022.03.02 - [안드로이드] - [안드로이드] SQLite RecyclerView 연락처 만드는 방법 part1 - 조회

 

[안드로이드] SQLite RecyclerView 연락처 만드는 방법 part1 - 조회

앞으로 SQLite, RecyclerView를 통해서 연락처 만드는 방법을 알아보겠습니다. 내용이 많다 보니 조회, 등록, 수정, 삭제 별로 나눠 올리겠습니다. 이번에는 조회 부분입니다. 목차 1. 실행 화면 2. 연락

aries574.tistory.com

2022.03.03 - [안드로이드] - [안드로이드] SQLite RecyclerView 연락처 만드는 방법 part2 - 등록

 

[안드로이드] SQLite RecyclerView 연락처 만드는 방법 part2 - 등록

이번 시간에는 이전에 이어서 연락처 등록하는 방법을 알아보겠습니다. 이전 포스팅을 먼저 보고 오시면 됩니다. 2022.03.02 - [안드로이드] - [안드로이드] SQLite RecyclerView 연락처 만드는 방법 part1 -

aries574.tistory.com

2022.03.04 - [안드로이드] - [안드로이드] SQLite RecyclerView 연락처 만드는 방법 part3 - 상세

 

[안드로이드] SQLite RecyclerView 연락처 만드는 방법 part3 - 상세

이번 시간에는 이전에 이어서 연락처 상세화면 만드는 방법을 알아보겠습니다. 이전 포스팅을 먼저 보시고 오시면 됩니다. 2022.03.02 - [안드로이드] - [안드로이드] SQLite RecyclerView 연락처 만드는

aries574.tistory.com

2022.03.05 - [안드로이드] - [안드로이드] SQLite RecyclerView 연락처 만드는 방법 part4 - 수정

 

[안드로이드] SQLite RecyclerView 연락처 만드는 방법 part4 - 수정

이번 시간에는 이전에 이어서 연락처 수정하는 방법을 알아보겠습니다. 이전 포스팅을 먼저 보시고 오시면 됩니다. 2022.03.02 - [안드로이드] - [안드로이드] SQLite RecyclerView 연락처 만드는 방법 part

aries574.tistory.com


목차

1. 실행 화면

2. 라이브러리 등록

3. DB 클래스 삭제 기능 구현

4. 연락처 메인코드 기능 추가


1. 실행 화면

 

2. 라이브러리 등록

build.gradle(Module:프로젝트명:app)

dependencies 괄호 안에 아래 코드를 넣어주시면 됩니다.

implementation 'it.xabaras.android:recyclerview-swipedecorator:1.4'

 

setting.gradle

repositories 괄호 안에 아래 코드를 넣어주시면 됩니다.

maven { url 'https://jitpack.io' }

 

3. DB 클래스 삭제 기능 구현

 

PhoneBookDB.java

   /**
     * 연락처 삭제
     * @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();
        }
    }

 

 

4. 연락처 메인코드 기능 추가

 - 추가 -

 등록한 라이브러리 recyclerview-swipedecorator를 통해서 recyclerView에 제스처 기능을 추가했습니다. 

 onSwiped: 제스처에 따른 기능 구현

 onChildDraw: 제스처 그림 구현

MainActivity.java

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

ic_delete.xml
0.00MB

 

 - 전체 코드 - 

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) 페이지 쉽게 만드는 방법

 

[안드로이드] 온보딩(Onboarding) 페이지 쉽게 만드는 방법

이번 시간에는 앱 실행 시에 앱에 관한 설명들을 페이지 형태로 넘겨가면서 보여주는 형태인 온보딩(Onboarding) 페이지 만드는 방법에 대하여 알아보겠습니다. 1. 실행 화면 2. 라이브러리 등록

aries574.tistory.com

2022.02.28 - [안드로이드] - [안드로이드] 알림(Alerter) 쉽게 만드는 방법

 

[안드로이드] 알림(Alerter) 쉽게 만드는 방법

이번 시간에는 알림(Alerter) 쉽게 만드는 방법에 대하여 알아보겠습니다. 목차 1. 실행 화면 2. 라이브러리 등록 3. 메인 화면 구성 activity_main.xml 4. 메인 코드 구현 MainActivity.java 1. 실..

aries574.tistory.com

2022.02.27 - [안드로이드] - [안드로이드] 이미지(Image) 흐림 효과(Blur) 쉽게 주는 방법

 

[안드로이드] 이미지(Image) 흐림효과(Blur) 쉽게 주는 방법

이번 시간에는 이미지(Image) 흐림 효과(Blur)를 쉽게 주는 방법에 대하여 알아보겠습니다. 목차 1. 실행 화면 2. 라이브러리 등록 3. 메인 화면 구성 activity_main.xml 4. 메인 코드 구현 MainActi..

aries574.tistory.com

반응형

관련글 더보기

댓글 영역