분류 전체보기

    RecyclerView의 notifyItem메서드들의 문제점을 해결해보자! 2탄(AsyncListDiffer)

    RecyclerView의 notifyItem메서드들의 문제점을 해결해보자! 2탄(AsyncListDiffer)

    지난 시간엔 DiffUtil을 이용해서 문제점을 해결했다면 이번 시간엔 AsyncListDiffer을 이용해서 문제를 해결해 보겠습니다. 이번 포스팅을 보고 나면 ListAdapter을 이해하는데 훨씬 수월합니다. ListAdapter가 AsyncListDiffer의 래핑 클래스니까요 개념 DiffUtil이 두 리스트의 차이점을 비교할 때 백그라운드 스레드에서 작동하도록 도와주는 도우미라고 볼 수 있습니다. 리사이클러뷰 어댑터에 연결될 수 있고 제출된 리스트 간에 변경사항을 어댑터에게 알립니다. 단순화를 위해 ListAdapter를 사용할 수 있습니다. 래퍼 클래스라 문제없습니다. 전체 과정은 다음과 같습니다. getCurrentList를 사용하여 현재 목록에 액세스 하고 해당 데이터 개체를 표시합니다...

    데이터 클래스(Data Class)

    데이터 클래스(Data Class)

    데이터 클래스(Data Class) 우리는 데이터를 보관하는 것이 주된 목적인 클래스를 만드는 것은 흔한 일이다. 이러한 클래스에서 일부 표준 기능과 일부 유틸리티 기능을 매번 기계적으로 만드는 경우가 있다. 코틀린에선 이를 지원하기 위해 데이터 크래스를 제공한다. data class User(val name: String, val age: Int) val jack = User("Jack", 1) 컴파일러는 기본 생성자에 선언한 모든 프로퍼티로부터 다음 멤버를 생성한다. equals() / hashCode() 쌍 "User(name=John, age=42)"형식의 toString() 선언 순서대로 프로퍼티에 대응하는 componentN() 함수 copy() 함수 데이터 클래스가 일관성 + 의미 있는 기능..

    RecyclerView의 notifyItem메서드들의 문제점을 해결해보자! 1탄(DiffUtil)

    RecyclerView의 notifyItem메서드들의 문제점을 해결해보자! 1탄(DiffUtil)

    RecyclerView RecyclerView란? 1. 정의 안드로이드 공식문서에는 A flexible view for providing a limited window into a large data set.로 소개하고 있습니다. 번역하면 '대규모 데이터셋을 제한된 범위에 제공하기 위한 유연한 뷰' huzit.tistory.com 리사이클러뷰를 사용하다 보면 뷰 홀더에 있는 데이터를 변경해야 할 때가 있습니다. 그럴 때마다 notifyItemChanged()를 이용해서 리사이클러뷰의 리스트를 갱신해 왔습니다. 오늘은 다른 방법으로 리스트를 갱신하는 것과 왜 써야 하는지에 대해 샘플코드로 알아보겠습니다. DiffUtil이 뭔데? DiffUtil is a utility class that calculates..

    SDK location not found

    SDK location not found

    원인 Git에서 프로젝트를 Pull 했는데 SDK 위치를 찾지 못함. 맥 -> 윈도우로 받아서 \, / 차이로 인한 오류라고 판단됩니다. 해결 방법 PC에서 sdk의 위치를 찾아 local.properties 파일에 넣어주면 됩니다. 만약 local.properties가 없다면 만들어주면 됩니다.

    데이터 바인딩(Databinding) 표현식 언어와 이벤트 처리

    데이터 바인딩(Databinding) 표현식 언어와 이벤트 처리

    데이터 바인딩은 단순히 데이터를 결합하는 것뿐만 아니라 표현식으로 데이터를 가공하거나 메서드 참조와 리스너를 결합하여 별도의 호출코드 없이 사용할 수 있습니다. 표현식 언어 일반적인 기능 표현식 언어는 관리형 코드에서 볼 수 있는 표현식과 매우 비슷합니다. 산술 +, -, /, *, % 문자열 연결 + 논리 &&, || 바이너리 &, |, ^ 단항 +, -, !, ~ 전환 >>, >>>, 14. 고차함수와 람다 고차 함수 고차 함수는 함수를 파라미터로 받거나 함수를 리턴하는 함수이다. fun lock(lock: Lock, body: () -> T): T{ lock.lock() try { return body() } finally { lock.unlock() } } 위 코드를 보면 body는 함수 타입인 ..

    데이터 바인딩(Databinding)이란?

    데이터 바인딩(Databinding)이란?

    오늘 알아볼 것은 뷰 바인딩 관련 문서를 찾다 보면 반드시 한 번은 보는 데이터 바인딩입니다. 뷰 바인딩을 모르고 보셔도 되지만 한 번 봐주세요 ㅎㅎ 뷰 바인딩 소개말 안드로이드 프로젝트를 처음 생성해서 뷰에 데이터를 표현할 때 가장 많이 쓰는 함수는 "View.findViewById(id: Int)" 일 것입니다. 하지만 뷰에 쓰는 컴포넌트가 많아질수록 반복해서 호출해야 huzit.tistory.com 정의 데이터 바인딩의 정의에 대해 공식 사이트에선 아래와 같이 말하고 있습니다. 데이터 결합 라이브러리는 프로그래매틱 방식이 아니라 선언적 형식으로 레이아웃의 UI구성요소를 앱의 데이터 소스와 결합할 수 있는 지원 라이브러리입니다. 기존 위젯(ex. textview)에 데이터를 넣는다고 생각해 보면 xm..

    Waiting For Debgger 무한 대기

    Waiting For Debgger 무한 대기

    증상 run app을 했음에도 waiting For Debegger이 계속 뜨고 있습니다. 해결 방법 테스트용 기기를 쓰고있으므로 재부팅 해주고 File -> Invalidate chach 해줬습니다.

    Build was configured to prefer settings repositories over project repositories but repository 'flatDir' was added by build file 'app/build.gradle'

    Build was configured to prefer settings repositories over project repositories but repository 'flatDir' was added by build file 'app/build.gradle'

    상황 aar 형태의 라이브러리를 등록하는 중 발생했습니다 코드 android{ ... repository{ flatDir{ dirs 'libs' } } } dependencies { ... implementation(name: '***_sdk', ext:'arr') } 해결 방법 /* android{ ... repository{ flatDir{ dirs 'libs' } } } */ dependency{ ... implementation files("libs/***_sdk.aar") } repository 코드를 전부 삭제하고 implementation이 해당 유형의 파일을 찾는 것이 아닌 상대경로로 직접 연결했습니다. 변경 -> 성공 참고 Build was configured to prefer setti..