리사이클러뷰의 각 아이템을 스와이프해서 추가적인 동작을 구현하고자 한다. 코딩의 미덕은 구글링이듯이, 사실 아래 블로그 보고 그대로 따라했다. https://codeburst.io/android-swipe-menu-with-recyclerview-8f28a235ff28 Android swipe menu with RecyclerView Using ItemTouchHelper Callback without any external libraries codeburst.io ItemTouchHelper를 활용하여 스와이프 시 해당하는 동작들을 정의해주는 것이 핵심이다. SwipeController를 통한 기본 설정 ItemTouchHelpler의 Callback을 구현하는 SwipeController 클래스를 통..
회원가입을 위한 간단한 이메일 / 비밀번호 입력 폼을 구현하려고 한다. 사실 머테리얼 디자인에서 텍스트 필드를 활용하면 정말 쉽게 구현할 수 있다. Material Design Build beautiful, usable products faster. Material Design is an adaptable system—backed by open-source code—that helps teams build high quality digital experiences. material.io xml 세팅 머테리얼 디자인의 텍스트 필드를 보면, TextInputEditText를 TextInputLayout이 감싸는 구조이다. 입력과 관련된 부분은 editText가, 이외 부분들은 layout을 만지면 된다. 따..
트리 구조로 리사이클러뷰를 사용하고 싶은 경우가 있다. 각 가게들의 쿠폰을 저장하기 위해서, 각 가게 - 각 쿠폰의 트리 구조로 리사이클러뷰를 구현하고자 했다. 가장 간단한 방법은 리사이클러뷰에 붙이는 아이템의 종류를 헤더(가게) / 자식(쿠폰)으로 나눠서 역할을 분리하는 것이다. 하나의 리사이클러뷰에 [동일 클래스] 가게-쿠폰-쿠폰-쿠폰-가게-쿠폰-쿠폰.... 로 해버리는 것이다. 쿠폰 객체 구성 일단 사용할 쿠폰에 관련된 데이터를 들고 있는 클래스를 선언하자. 쿠폰 id, 가게명, 쿠폰명 등등을 필드로 갖고 있다. @Getter @Setter @AllArgsConstructor @Builder public class CouponModel{ long couponId; String storeName; S..
다음 주소 찾기 API 활용하기 회원가입이나 주문 과정에서, 배송 정보를 입력받기 위해서는 정확한 주소를 입력받아야 한다. 네이버 지도에선 주소 찾기 API를 제공하지 않아 다음의 우편번호 서비스 API를 활용하고자 한다. KEY 발급이나, 사용량에 제한이 없고 언제나 무료로 사용할 수 있어서 정말 편한 것 같다. Daum 우편번호 서비스 우편번호 검색과 도로명 주소 입력 기능을 너무 간단하게 적용할 수 있는 방법. Daum 우편번호 서비스를 이용해보세요. 어느 사이트에서나 무료로 제약없이 사용 가능하답니다. postcode.map.daum.net 대략적인 방법은 다음과 같다. Daum API에서 제공하는 js 스크립트를 넣은 HTML 파일을 서버에 업로드 안드로이드에선 웹뷰로 해당 HTML 파일을 실행..
Fragment에서 직전 DialogFragment의 값 받아오기 JetPack Navigation을 사용하며 Fragment들을 navigate할 때, DialogFragment를 사용하며 값을 받아올 일이 있다. 과정 : 주문 과정 중 쿠폰 선택 문제 : DialogFragment(쿠폰 선택 화면)에서 선택한 쿠폰 값을 Dialog를 호출한 Fragment(주문 화면)으로 받아와야 함 Safe Args나 Bundle을 사용해 값 이동 (Navigate로 화면 전환) 이 경우에는 결국 주문 화면을 재호출하기 때문에, 쿠폰 선택 이전에 입력되었던 값들이 모두 초기화되어 버린다. 따라서 DialogFragment를 종료하며 값을 전달해야 했다. ViewModel 사용 Fragment와 DialogFragm..
보통 RecyclerView를 사용하면 Adapter를 사용해서 내부 아이템을 관리하게 된다. 여기서 각 아이템을 클릭했을 때 -> 화면을 이동시키고 싶은데, NavController를 어댑터에 넘겨주자니 뭔가 애매한 경우가 있다. 나아가 클릭 이벤트 발생 시 아이템 내부가 아니라 프래그먼트에서 처리해야 할 때, 그 동작을 아이템 외부로 넘겨줘야 하는 경우에 다음 방법을 사용할 수 있다. 과정 : 상점 목록에서 상점 클릭 시 상점 세부화면으로 이동 문제 : RecyclerView Adapter의 Viewholder에서 클릭 이벤트로 프래그먼트 전환 ClickListener 인터페이스 활용 다음과 같은 구조로 클릭 이벤트를 처리하면 쉽게 어댑터 외부 (프래그먼트)에서 클릭 이벤트를 처리할 수 있다. 클릭 ..
Java -> ClipBoard 자바에서 컴퓨터의 클립보드로 문자열을 간단하게 복사할 수 있다. Java AWT의 Clipboard를 임포트해서 사용하면 된다. import java.awt.*; import java.awt.datatransfer.*; StringSelection data = new StringSelection("복사할 String"); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard.setContents(data, data); ClipBoard -> Java 반대로 클립보드에서 자바로 넣는 것도 쉽게 할 수 있다. Clipboard clipboard = Toolkit.getDefaultTo..
인프런의 김영한님 JPA 강의 를 들으면서 인텔리J 꿀팁도 많이 얻었다. 그 중 하나는 Live Template로 빠르게 코드 작성하는 방법이다. Live Template 등록 인텔리J -> Settings -> Live Templates 1번 플러스버튼을 누르면 Template Group으로 새 그룹을, Live Template으로 템플릿을 설정할 수 있다. 2번 Abbreviation (약어) 를 통해 무슨 커맨드를 통해 실행할 것인지를 설정하고 3번 Expand with으로 약어와 함께 누를 커맨드 키도 설정할 수 있다. 그리고 이제 Template Text 안에 원하는 내용의 코드를 넣으면 된다. 마지막으로 4번 맨 밑에 Applicable 설정을 통해 원하는 언어에서 사용을 설정하면 된다 (Ja..
인텔리j를 사용하면서 제가 편하게 사용하는 단축키들을 잊어먹지 않게 적어놓았습니다. (궁극기 Ctrl + Space는 다들 아실 것 같아 제외하였습니다.) 더 편한 단축키들이 많겠지만... 제가 인텔리J를 오래 사용해보지 못해서, 좋은 단축키들이 있으면 댓글로 달아주세요. 명칭은 그냥 제 마음대로 붙인 거라 정확하지 않습니다! 창 관련 도구창 열기 ( Alt+1 ) 코드창에서 코드를 작성하다 편하게 옆의 프로젝트 트리로 이동할 수 있습니다. 탭 이동 (Alt + ←, →) 역시 코드 창에서 코드를 작성하다 편하게 열려져 있는 옆의 탭들로 이동할 수 있습니다. Generate 창 열기 (Alt + Insert) 빠르게 Generate 항목을 열어 여러 생성자나, Getter, Setter 등을 작성할 수 ..
인텔리J에서 JPA를 사용하다보면 JoinColumn등의 Annotation에서 Cannot resolve table 에러가 발생하기도 한다. name을 지정해주는 과정에서 발생하는데, 인텔리J에서 DB와 연동하여 컬럼이 존재하는지 체크하는 과정에서 발생 한 것이다. 정석적으로 인텔리j에서는 DataSource를 할당하라고 한다. 보통 hibernate에서 자동으로 테이블 생성/수정하는 경우 우리가 정해준 이름으로 DB에 적용되기를 바라기 때문에 이 깐깐한 에러를 그냥 안뜨게 하는 방법도 있다. Setting -> Editor -> Inspection에서 Unresolved Database References in Annotations 부분을 체크해제하면 된다. 전문가가 아니라 정확하지 않은 지식이 담겨..
Comment