리사이클러뷰의 각 아이템을 스와이프해서 추가적인 동작을 구현하고자 한다. 코딩의 미덕은 구글링이듯이, 사실 아래 블로그 보고 그대로 따라했다. 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 클래스를 통..
트리 구조로 리사이클러뷰를 사용하고 싶은 경우가 있다. 각 가게들의 쿠폰을 저장하기 위해서, 각 가게 - 각 쿠폰의 트리 구조로 리사이클러뷰를 구현하고자 했다. 가장 간단한 방법은 리사이클러뷰에 붙이는 아이템의 종류를 헤더(가게) / 자식(쿠폰)으로 나눠서 역할을 분리하는 것이다. 하나의 리사이클러뷰에 [동일 클래스] 가게-쿠폰-쿠폰-쿠폰-가게-쿠폰-쿠폰.... 로 해버리는 것이다. 쿠폰 객체 구성 일단 사용할 쿠폰에 관련된 데이터를 들고 있는 클래스를 선언하자. 쿠폰 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 인터페이스 활용 다음과 같은 구조로 클릭 이벤트를 처리하면 쉽게 어댑터 외부 (프래그먼트)에서 클릭 이벤트를 처리할 수 있다. 클릭 ..
도전과제 27 지도 위에 친구들의 위치를 표시해 보세요. 위치 좌표는 가상으로 정하고 친구들이 있는 위치에 친구의 사진이나 아이콘을 보여주도록 합시다. 친구들의 위치를 경위도 좌표로 두 군데 설정합니다. 친구들의 위치는 가상 위치로 지정하여 소스 코드에 넣어둡니다. 지도의 특정 영역을 보여준 후 그 위에 친구들의 위치를 실제 친구의 사진으로 표시합니다. 사진을 누르면 친구 정보를 토스트 메시지로 간단하게 보여줍니다. 참고할점 지도 위에 아이콘이나 사진을 표시하려면 마커를 만들어 지도에 추가해야 합니다. 풀이 앱 화면 안에 지도를 넣는 방법으로 MapFragment를 사용한다. 맵 프래그먼트는 구글맵 서비스 기능을 사용할 수 있도록 추가된 기능으로, Google Play Service 모듈을 사용해야 한다..
도전과제 26 증강 현실에서 쿠폰을 보여주는 화면을 가상으로 만들어보세요. 카메라 미리보기 화면을 보여주고 그 위에 쿠폰 이미지를 보여주면 증강 현실에서 보여주는 것처럼 만들 수 있습니다. 앱을 실행하면 카메라 미리보기 화면이 보이도록 하고 아래쪽에는 [쿠폰 보이기]와 [쿠폰 감추기] 버튼을 배치합니다. [쿠폰 보이기] 버튼을 누르면 카메라 미리보기 화면 위에 쿠폰 아이콘을 보여줍니다. [쿠폰 감추기] 버튼을 누르면 쿠폰 아이콘이 보이지 않도록 합니다. 쿠폰 아이콘을 선택하면 토스트 메시지로 선택된 쿠폰 정보를 간단하게 보여줍니다. 카메라 미리보기와 쿠폰 아이콘을 같이 보여주도록 프레임 레이아웃 안에 케메라 미리보기와 쿠폰 아이콘 두 개의 레이아웃을 준비합니다. 그런 다음 소스 코드에서 쿠폰 레이아웃의 ..
도전과제 25 단말의 앨범에 있는 사진들을 가져와 리스트로 보여주는 기능을 만들어 보세요. 앨범에 있는 사진들은 내용 제공자를 이용해 가져올 수 있습니다. 앨범에 저장된 사진을 가져와 사진 리스트를 표시합니다. 앨범에 들어 있는 사진은 내용 제공자(Content Provider)를 사용해 가져옵니다. 리싸이클러뷰의 한 아이템에는 사진 썸네일(Thumbnail) 이미지와 날짜를 표시합니다. 리싸이클러뷰의 위쪽에는 전체 사진의 개수를 표시합니다. 참고할점 단말의 사진 앱으로 사진을 찍으면 앨범에서 볼 수 있습니다. 앨범 앱을 사용하지 않고 여러분이 만든 앱에서도 앨범에 저장된 사진을 보여줄 수 있습니다. 풀이 이전 도전과제 18번 앨범의 사진을 번갈아 보여주기에서 리싸이클러뷰로 보여주기만 하면 되어서 간단하..
도전 24 패널에 빨간색 사각형을 만든 후 손가락으로 터치하여 드래그하면 사각형이 손가락과 함께 움직이도록 만들어 보세요. 화면에는 패널 하나가 보이도록 한 다음 이 패널 안에 빨간색 사각형을 하나 그려 넣습니다. 화면이 처음 띄워졌을 때 빨간색 사각형이 보이는 위치는 화면의 가운데 또는 좌측 상단으로 지정합니다. 손가락을 터치하여 움직이면 빨간색 사각형이 손가락의 움직임에 따라서 이동하도록 만듭니다. 참고할 점 손가락으로 터치하여 선을 그렸던 것과 같은 원리로 소스 코드를 구성하면 됩니다. 풀이 메인 레이아웃은 그냥 빈 레이아웃에 터치하여 움직이라는 글자만 배치하였다. 이제 이 레이아웃에 뷰를 그리는데, 이 뷰 안에서 빨간 버튼을 움직이도록 할 것이다. RedButton이라는 View를 상속하는 객체를..
도전과제 23 페인트보드 앱에 CAP를 설정할 수 있는 기능을 만들어 보세요. 손가락으로 터치하여 선을 그릴 때 선이 가질 수 있는 속성 중의 하나입니다. 페인트보드 앱은 위쪽에 버튼이 있고 아래쪽에 손가락으로 선을 그릴 수 있는 패널이 있습니다. 위쪽에 있는 버튼들의 아래쪽에 레이아웃을 추가하고 그 안에 CAP 스타일을 선택할 수 있는 라디오 버튼들을 배치합니다. CAP 스타일을 표시하는 라디오 버튼을 선택하면 선을 그리는 Paint 객체에 선택한 CAP 스타일이 설정되게 합니다. CAP 스타일을 변경한 후 손가락을 터치해서 선을 그리면 설정한 선의 속성으로 그려지도록 합니다. 참고할점 선의 속성은 여러 가지가 있는데 선의 속성을 모두 넣고 싶다면 별도의 설정 화면을 만들 수도 있습니다. 풀이 메인 레..
Comment