kotlin

안드로이드/에러 해결

[ 안드로이드 ] RecyclerView Filterable 사용 시 InConsistency detected. Invalid item position 에러 해결

에러 상황 [ 안드로이드 ] RecylcerView + Filterable을 이용하여 실시간 검색 기능 구현하기 졸업 작품을 진행하면서 위와 같은 화면을 구현해야했다. 약품 리스트를 받아와서, 검색한 단어와 일치한 모든 약품들을 보여줘야했다. 추가로 일치하는 단어에는 하이라이팅까지 해줘야했다. dongx2.tistory.com 이전에 위와 같은 화면을 구현하는 방법을 포스팅 했었는데, 위의 기능을 구현하면서 발생했던 에러에 대해서 적어보고자 한다. 에러 로그 검색을 하는 도중에 Incosistency detected. Invalid item postion ~~ 에러가 발생하면서 앱이 죽는 문제가 발생했다. 대충 어떤 부분에서 에러가 나는지 짐작은 되는데 정확히는 모르겠다. 이번 에러의 원인은 두 가지인 ..

안드로이드/이론

[ 안드로이드 ] Room DB - Dao 사용법

[ 안드로이드 ] 제목 DAO DAO는 인터페이스(interface)나 추상 클래스(abstract)로 정의할 수 있다. 안드로이드 공식 문서에 따르면 일반적으로는 인터페이스로 사용하라고 권장하고 있다. DAO 인터페이스 (또는 추상 클래스)에는 무조건 @Dao 어노테이션을 선언해주어야 한다. Retrofit의 Service와 매우 유사하기 때문에 많이 익숙한 형태이다. @Dao interface MedicineDao { @Insert fun insert(medicine: Medicine) @Insert fun insertAll(medicines: List) @Update fun update(medicine: Medicine) @Delete fun delete(medicine: Medicine) @Que..

안드로이드/이론

[ 안드로이드 ] RecylcerView + Filterable을 이용하여 실시간 검색 기능 구현하기

졸업 작품을 진행하면서 위와 같은 화면을 구현해야했다. 약품 리스트를 받아와서, 검색한 단어와 일치한 모든 약품들을 보여줘야했다. 추가로 일치하는 단어에는 하이라이팅까지 해줘야했다. 위의 화면에서 지켜져야 할 조건들은 아래와 같다. 전체 약품 리스트를 미리 갖고 있어야한다. 입력을 감지해서 실시간으로 결과를 출력할 것이기 때문에, 속도나 서버 부하 측면에서 매번 서버로 요청을 보낼 수 없다. 미리 전체 약품 리스트를 받아와서 변수로 저장해둔 후 사용해야한다. 일치하는 단어는 하이라이팅으로 표시해줘야 한다. Spannable을 이용해서 TextView의 색상을 조절해주면 된다. 약품 검색 화면 xml 작성 먼저 화면을 작성해준다. 나같은 경우에는 약품을 선택했을 때 해시태그처럼 상단에 추가되게 할 예정이었..

BOJ

[ 백준 2579 ] - 계단 오르기 (Kotlin)

2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 문제 이해 & 기본 개념 계단은 1~2칸 씩 이동할 수 있다. 3칸을 연속으로 밟아선 안된다. 마지막 계단은 반드시 밟아야한다. 위의 조건에 한해서 계단을 밟았을 때 받을 수 있는 가장 높은 점수를 구하는 문제 중요 포인트 해당 문제에서의 중요 포인트는 아래와 같다. 맨 뒤에서부터 시작 문제 조건에서 마지막 계단은 무조건 밟아야한다고 명시되어 있다. 시작점을 마지막 계단으로 놓고 내려가는 방식으로 구현하면 쉽다. 연속으로 3개의 계단을 밟는 경우 판별 이전에 몇 칸을 뛰어서..

BOJ

[ 백준 10812 ] - 바구니 순서 바꾸기 (Kotlin)

10812번: 바구니 순서 바꾸기 도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2 www.acmicpc.net 문제 이해 & 기본 개념 1 ~ N 까지의 원소가 있는 배열이 존재 begin ~ end 구간에서 mid를 기준으로 앞뒤를 바꾸는 문제 중요 포인트 스왑을 이용하면 배열 하나로 풀 수 있다. 최종 풀이 mid ~ end의 원소를 스왑을 통해 앞으로 가져올 예정 범위의 마지막 원소부터 시작해서 범위의 맨 앞으로 끌어다 놓는다. mid ~ end 사이의 원소를 begin까지 swap하는 방식으로 반복하면 됨 최악의 경우는 구간이 1 ~ N이고 mid가 1..

안드로이드

[ 안드로이드 ] 구글 캘린더 구현하기 (3) - 캘린더 Week <-> Month 전환 구현

2023.02.28 - [안드로이드] - [ 안드로이드 ] 구글 캘린더 구현하기 (2) - CalendarView 라이브러리 속성 정리 기본 레이아웃 메인 레이아웃 FrameLayout 내에 WeekCalendarView와 CalendarView를 선언했다. 각 캘린더뷰의 visibilty 속성과 애니메이션을 활용하여 자연스럽게 전환되도록 구현하였다. 현재는 테스트이기에 체크 박스로 전환을 구현해놨지만, 실제 프로젝트에선 스크롤로 전환하는 방식으로 구현할 예정이다. 달력 날짜 셀 레이아웃 달력의 날짜 셀 레이아웃이다. 현재 프로젝트에선 하나의 셀에 날짜와 도트로 단계를 표시해줄 예정이기 때문에 아래와 같이 선언해주었다. 도트는 가로로 최대 4개까지 생성되는데, 아직은 테스트 단계이므로 하나만 생성했다. ..

BOJ

[ 백준 1967 ] - 트리의 지름 (Kotlin)

1967번: 트리의 지름 파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연 www.acmicpc.net 문제 이해 & 기본 개념 특정 노드 2개를 잡고 양쪽으로 당겼을 때, 가장 길게 늘어나는 경우를 트리의 지름이라 한다. dfs를 수행해서, 각 노드의 자식들 중 가장 큰 가중치 + 자신의 가중치를 리턴한다. 갈라지는 부분에선, 해당 노드가 중심이 될 수 있는 가능성이 있기에, 자식들의 가중치의 합 중 가장 큰 2개를 구해서 max와 비교한다. 양쪽으로 잡아 당길 때, 두 개를 잡고 당기기 때문에 상위 가중치 2개를 선택 중요 포인트 이진 트리..

BOJ

[ 백준 9466 ] - 텀 프로젝트 (Kotlin)

9466번: 텀 프로젝트 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 www.acmicpc.net 문제 이해 & 기본 개념 n 명의 학생이 각각 같이 팀이 되고 싶은 학생을 1명씩 선택한다. 학생들을(s1, s2, ..., sr)이라 할 때, r=1이고 s1이 s1을 선택하는 경우나, s1이 s2를 선택하고, s2가 s3를 선택하고,..., sr-1이 sr을 선택하고, sr이 s1을 선택하는 경우에만 한 팀이 될 수 있다. 학생들이 선택한 결과가 주어질 때, 팀에 속하지 않는 학생의 수를 구하는 문제 중요 포인트 선택한 학생들끼리 사이클을 이루는 경우가 팀이 되는..

dongx._.2
'kotlin' 태그의 글 목록 (3 Page)