-
[기획] 기능 구현하기 전 해야할 일 Retrofit2 과 CheckedTextView안드로이드 스튜디오 2022. 10. 5. 12:04
기능을 구현하기 전에 구현할 계획을 세워보았습니다. 해당 서비스를 이용하면서 유저가 겪는 화면의 구성과 어떠한 방식으로 데이터가 이동할 지를 구별하는 과정입니다.
기능 구현 리스트 현재 업무 To Do List 같은 어플리케이션을 기획중입니다. 여기서 조금 더 나아가 "서비스"를 만들고자 노력하고 있습니다.
지금까지 만든 기능들과 앞으로 만들어야 할 기능을 보면서 앞으로 구현해야할 기능들을 하나씩 정리하고 있습니다. 개인적인 마지노선을 잡고, 그 선에 도달하기까지의 과정을 나의 상황을 고려하면서 하나씩 기획하고자 합니다.
현재 내일(목)을 기준으로 구현하고자 할 기능은 "(나의) 업무 이름 CRUD 입니다.
-> 로그인 한 사용자가 나의 업무 목록에서 업무 이름을 추가, 수정, 조회, 삭제하는 기능
해당 기능을 구현하기 위해 해야할 일들을 쪼개어 보았습니다.
*사전 행동
- Retrofit2 에 대한 이해
- Intent에 대한 이해
- 안드로이드 스튜디오 에서 JAVA 언어를 사용.
- Mysql 에 대한 기본적인 이해
- 로그인하고 인덱스와 아이디를 넘김 (자동로그인 가능)
- 나의 업무 목록 리스트에 업무를 추가해야한다 (INSERT)
- 나의 업무 목록 리스트를 조회한다. READ
- 기본 업무 목록의 데이터 집합이 있다. -> Retrofit2을 위해 모델 클래스(DTO)를 만들고 해당 Mysql의 테이블을 조회하여 데이터베이스에서 데이터를 가져온다. 데이터는 리스트 형태로 가져온다.
1. 로그인을 하여 로그인 인덱스 + 로그인 아이디를 Intent로 넘긴다.
2. 넘긴 데이터에 따라 목록을 불러와야한다.
일단 어플리케이션에서 확인할 수 있는 화면 Layout은 다음과 같은 화면입니다. 지금은 선택한 업무가 없기 때문에 사실은 아래와 같이 RecyclerView를 추가해 놓은 상태입니다.
로그인한 인덱스 값에 따라서, 리사이클러뷰에 아이디 인덱스에 해당하는 부분만 POST 형태로 데이터를 불러온다.
그렇다면 다음과 같은 문제가 발생한다.
그 인덱스 값에 해당하는 데이터는 언제 불러오는가?
그 인덱스에 해당하는 값은 아래 Extended Floating Action Button 을 클릭하여 새로운 Intent 로 화면을 전환합니다. 그 화면은 데이터를 추가하는 화면을 불러옵니다.
그럼 다음과 같은 화면이 뜨도록 설정해놓았습니다. 해당 화면의 리사이클러뷰에서는 로그인 인덱스 값이 0인 값, 즉 기본값을 불러오는 것입니다. 기본 데이터를 불러온 다음에 해당 데이터를 CheckedTextView로 하여 체크박스를 선택하여 리사이클러뷰 리스트에서 다중선택이 가능하도록 하였습니다.
리사이클러뷰에서는 리스트뷰와 다르게 해당 리스트 항목들을 커스텀할 수 있습니다. 그렇기에 체크박스 형태로 데이터를 추가하는 방법을 선택하였습니다.
CheckedTextView의 코드는 다음과 같습니다.
기본 CheckedTextView에서는 오른쪽에 체크박스가 뜨는 형식인데, 이를 왼쪽으로 drawableLeft 로 바꾸었고, 다중선택이 가능하도록 하였으며 기본 checked 는 false 로 체크박스가 선택되지 않은 형태로 제공하도록 하였습니다.
해당 데이터는 DTO를 통해 미리 만들어둔 데이터 클래스를 활용하여 업무 이름에 해당하는 내용을 리사이클러뷰에서 리스트 형태로 불러왔으며 체크박스를 통해 추가할 지 말지를 정하려고 합니다. Retrofit2로 보면 INSERT 에 해당합니다.
순서는 어떻게 진행되는가?
- 로그인한 인덱스 값과 같은 데이터를 불러와서 나의 업무 목록에 해당 인덱스 값에 해당하는 내용을 불러온다 Read
- 업무 목록 추가하기 버튼을 클릭하면 기존에 로그인 인덱스 값이 null = 0 인 값을 불러온다 (기본값).
- 불러온 내용은 리사이클러뷰의 CheckedTextView 형태로 불러오며 CheckBox 에 체크하고, 선택완료 버튼 누르기
- 선택완료 버튼을 누르면 , 기존 Mysql 의 업무이름 테이블에 로그인 인덱스 값을 추가한 새로운 항목들을 INSERT 하기.
- 나의 업무 목록 리스트에 로그인 한 인덱스 값을 불러오기 Read
- 나의 업무 목록 리스트에서 UPDATE, DELETE 가능하게 하기
- Popup 창과 같이 해당 리스트를 클릭하면 팝업창이 뜨며 기존 업무 이름에 대해 수정할 수 있는 창을 만들기 UPDATE
- UPDATE 는 해당 업무이름 (로그인 인덱스 값이 같은) 의 업무 인덱스 값과, 로그인 인덱스, 업무 이름을 불러와서 업무 이름을 수정하게 한다. UPDATE
- Delete 버튼을 추가하여 해당 버튼을 클릭하면 AlertDialog 창이 떠서 데이터베이스에서 삭제하기 전에 다시 한 번 확인하기
- 삭제버튼 클릭시, 데이터베이스에서 삭제 DELETE
여기서부터가 조금 어렵다.
이렇게 기존의 업무를 추가하고 추가된 업무를 리스트에서 CRUD 의 나머지 RUD 과정을 하는 것은 기존에 꾸준히 해왔던 것이기에 어려움이 없다. 하지만, 이미 추가한 목록에서 또 추가할 경우, 기존에 추가된 내용은 배제해야한다.
어떻게 기존에 추가된 데이터는 다시 선택하지 못하도록 할까?
이 부분에 대해서는 데이터를 불러오는 과정에서 구별할 수 있도록 했습니다. 기존에 로그인 인덱스 null = 0 인 기본값과, 로그인한 인덱스로 새로운 업무 이름을 Insert 했기 때문에 같은 업무 이름으로 2개의 항목이 생성되었습니다. 물론 데이터베이스의 무결점의 특성에 따라 완전히 같은 내용은 아니며 중복되지 않습니다.
여기에 사용자가 한 명이라면 상관없지만, 여러 명일 경우, 전체 갯수로 판단하는 것은 데이터를 구별할 수 없기 때문에, 데이터의 로그인 인덱스와 기본 null = 0인 값을 기준으로 구별하기로 했습니다.
조건문을 걸어서, 기존 Null = 0 인 값과, 로그인한 인덱스의 값을 가진 항목이 둘 다 존재한다면, 나의 업무 추가하기 Recyclerview 에서 추가할 수 없도록 하려고 합니다.
이곳의 리사이클러뷰에서 CheckedTextView 를 불러오고 체크박스를 선택해야하는데, 이미 선택이 되어 있는 것으로 표현하고자 합니다. 원래는 다른 업무를 체크리스트에서 선택하면 선택과 함께 가로로 가운데에 취소선을 넣기도 하는데, 업무 선택은 체크박스를 선택하고, 해당하는 내용에 대해 표시만 하고자 합니다.
그렇다면 프로세스는 다음과 같아집니다.
- 기존에 업무를 추가하고 또 추가할 경우, 나의 업무 추가하기 버튼 클릭하기
- 이미 선택하여 "나의 업무 목록" 에 있는 업무들은 체크박스가 체크되어 있는 형태로 존재하기
- 체크박스를 통해 Checked 를 해제하면, 해당 리스트는 업무 이름에 로그인 인덱스가 추가되어 추가되어 있음. 이 내용을 수정해야함. 그래서 체크표시를 건들지 못하게 아예 막을 예정임.
- 그렇다면 데이터는 해당 내용에 대해서 손댈 수 없으며, 업무 리스트는 나의 업무 목록에서만 제거할 수 있음. 추가하기 내용에서는 추가만 해야함.
여기까지 진행하고, 안되면 수정하고자 합니다. 22. 10. 05. (수).
반응형'안드로이드 스튜디오' 카테고리의 다른 글
[데이터베이스] 로그인과 회원가입, 그리고 게시판 (0) 2022.10.14 [기능] 좋아요 (0) 2022.10.12 [안드로이드] 나의 업무 목록과 좋아요 기능 (0) 2022.10.10 [안드로이드] 나의 업무 추가하기 (0) 2022.10.06 [기획] 어플리케이션 기획 혹은 서비스 기획 (0) 2022.10.04