문제의 발단 최근 프로젝트에서 요즘 많이 쓰이는 ListAdapter(feat.DiffUtil)을 사용해보게 되었다. 나는 멤버변수로 MutableList를 가지고 있었고, 해당 리스트를 add, remove로 수정하고 submitList의 파라미터로 전달했다. 그런데 RecyclerView가 새로고침되지 않았다. 발생 원인 ListAdapter에게 submitList로 리스트를 전달하면 ListAdapter 내부의 AsyncListDiffer 멤버변수의 submitList를 호출한다. 해당 메소드는 멤버로 이전에 전달받은 list를 가지고 있고, 기존 멤버변수와 전달받은 파라미터의 list를 비교한다. 만약 두 리스트가 같다면 함수를 리턴한다. (여기서 같다는 의미는 메모리 주소가 같다는 것을 의미한다..
글을 쓰게 된 배경 MaterialSwitch 사용 중 track과 thumb 색상을 앱 테마에 맞춰야했다. 더 정확히 말하면 trackTint와 trackThumb를 바꿔주어야 했고 이 때 Android resource color directory에 selector를 사용해야 했다. 처음에는 위와 같이 selector를 정의했는데 trackTint가 적용되지 않은 것처럼 보였다. 당시 추측으로는 몇 가지 상태값이 빠져있어서 원하는대로 동작하지 않는다고 생각해 상태값을 모두 추가해주었는데도 변함이 없었다. 그렇게 찾게된 공식문서에서 내가 만든 selector는 충실히 본인의 역할을 하고 있었다는 사실을 깨닫게 되었다. 문제의 원인 https://developer.android.com/guide/topic..
이 문제가 0레벨 PCCE 기출문제 마지막이다. 사실 몇 번 들어갔다 문제 읽기 귀찮아서 뒤로 가기를 눌렀던 적이 있다 ㅋㅋ 아무튼 마무리를 지어보도록 하자. 문제 물건 종류가 들어있는 배열이 하나 있고, 해당 배열과 1대1로 짝지어진 갯수가 들어있는 배열이 있다. 여기서 우리가 마지막으로 리턴해야 할 값은 물건 종류이다. 그리고 나는 이 문제가 딱 한 줄만 수정해야하는 디버깅 문제인 점이 기억났다. 따라서, 아무런 수정도 하지 않고 먼저 실행해보았더니 결과가 물건 종류가 아닌 갯수가 리턴되고 있었다. 게다가 그 갯수도 총합이 아닌 함수 파라미터로 주어진 num배열 값 중 하나였다. 풀이 주석 아래 코드는 첨부하지 않았는데 말로 요약하자면 이렇다. 간단히 갯수 최댓값에 따라 리턴값을 갱신하는 코드이다. ..