본문 바로가기

전체 글

(89)
리스트뷰를 스크롤했을 때 상태가 저장이 안 되는 현상에 대해서 안녕하세요? 닉네임간편입니다. 이번 시간에는 리스트뷰를 스크롤했을 때 스위치 상태나 체크박스의 상태가 저장이 안 되는 현상에 대해서 다루어보겠습니다. 1. 리스트뷰란 리스트뷰(ListView)는 뷰들의 집합을 세로로 스크롤이 가능하게 표시하는 위젯입니다. 각 뷰들은 이전 요소의 바로 아래에 위치합니다. 많은 요소들을 순차적으로 화면에 표시하기 위해 사용합니다. 2. 문제 그런데 리스트뷰를 사용하면서 문제가 하나 있습니다. 아래 동영상처럼 스위치를 선택을 하여도 스크롤을 한 다음 다시 돌아오면 상태가 변하는 것입니다. 3. 발생 원인 리스트뷰는 스크롤 시 퍼포먼스의 기능을 위해서 뷰를 재사용합니다. 만일 100개의 뷰가 있고 화면에는 5개의 뷰만 표시할 수 있다고 가정하겠습니다. 이때 100개의 뷰 모두를..
resource android:color/system_neutral1_1000 not found 안녕하세요? 닉네임간편입니다. 이번 시간에는 제목의 오류에 대해서 알아보겠습니다. 1. 발생 원인 Material Components library의 버전이 1.5.0-alpha03으로 업데이트되면서, complieDskVersion 31을 요구하기 때문에 발생합니다. 2. 해결 방법 build.gradle(app)에 있는 complieSdkVersion을 31로 바꾸어주면 이 에러는 해결됩니다. compileSdkVersion "$사용하고 있던 버전" 이것을 아래처럼 바꾸면 됩니다. compileSdkVersion 31 Material Components library의 버전 및 업데이트 내역에 대한 자세한 사항은 아래 사이트에서 확인하실 수 있습니다. https://github.com/material..
예제로 알아보는 DiffUtil - RecyclerView 성능을 향상하자! 안녕하세요? 닉네임간편입니다. 이번 시간에는 DiffUtil에 대해서 알아보겠습니다. 1. 개요 DiffUtil은 안드로이드 어댑터에서 현재 데이터 리스트와 교체될 데이터 리스트를 비교하여 무엇이 바뀌었는지 알아내는 클래스입니다. 이를 통해 기존 데이터 리스트에서 아이템에 수정이 생겼을 때 전체 리스트를 갱신하는 게 아니라 바뀐 아이템에 대해서만 데이터를 바꿔주고, 이를 통해 빠르고 효율적으로 데이터 갱신을 할 수 있습니다. 2. 만드는 법 DiffUtil을 사용하기 위해선 DiffUtil.IteamCallback과 ListAdapter가 필요합니다. 이전에는 DiffUtil.Callback, AsyncListDiffer 등이 필요했지만 이제는 ListAdapter라는 최강의 무기가 나왔기 때문에 위 두..
Room 을 사용해 데이터를 관리하자! with 사용법과 예제 안녕하세요? 닉네임간편입니다. 이번 시간에는 Room 라이브러리를 사용하겠습니다. 1. 개요 ORM은 객체와 관계형 데이터베이스의 데이터를 매핑하고 변환하는 기술로 복잡한 쿼리를 잘 몰라도 코드만으로 데이터베이스의 모든 것을 컨트롤할 수 있도록 도와줍니다. 안드로이드는 SQLite를 코드 관점에서 접근할 수 있도록 ORM 라이브러리인 Room을 제공합니다. 안드로이드 스튜디오는 SQLite보다 Room을 사용하는 것을 굉장히 권장하기 때문에, 저도 Room을 자주 사용합니다. 2. 준비 Room 라이브러리를 사용하기 전 준비가 필요합니다. 1) build.gradle(app) 파일에 아래 플러그인을 추가합니다. plugins{ id 'com.android.application' id 'kotlin-and..
스플래시(Splash) 화면 안녕하세요? 닉네임간편입니다. 이번 시간에는 스플래시(Splash) 화면에 대해 알아보겠습니다. 1. 정의 스플래시(Splash) 화면은 앱이 실행되기 전에 잠깐 보였다가 사라지는 화면을 말합니다. 이 화면은 앱의 정보를 함축해서 보여줄 수도 있고, 메인 화면이 초기화될 때까지의 지루한 시간을 없애주는 역할도 합니다. 2. 만드는 법 스플래시 화면은 화면 단위이기 때문에 액티비티로 만듭니다. 그리고 메니페스트 파일에서 다음과 같이 인텐트 필터에 요소를 설정합니다. 이렇게 하면 스플래시 화면인 SplashActivity가 맨 처음으로 띄워질 수 있습니다. 스플래시 화면은 XML 레이아웃을 만들어 인플레이션하는 방식을 사용할 수도 있지만, 매니페스트 파일에서 theme 속성으로 스타일을 지정하는 방식을 사용..
텍스트뷰(TextView) 옆에 이미지 설정하는 법 안녕하세요? 닉네임간편입니다. 이번 시간에는 텍스트뷰 옆에 이미지를 설정하는 법에 대해서 알아보겠습니다. 1. 개요 텍스트뷰 안에는 문자열의 상하좌우에 이미지(Drawable)를 설정할 수 있습니다. 이를 통해 문자열 근처에 이미지를 설정할 경우 이미지 뷰를 따로 만들지 않더라도 이미지를 보다 편리하게 삽입할 수 있습니다. 2. 사용법 android:drawable[방향]으로 이미지를 원하는 방향에 설정하면 됩니다. 예를 들어 문자열 왼쪽에 이미지를 삽입하고 싶다면 android:drawableStart 혹은 android:drawableLeft로 설정하면 됩니다. 또한 문자열과의 간격을 주고 싶다면 drawablePadding을 설정하면 됩니다. 아래는 그 예시입니다. 3. 속성 여러 가지 추가적인 속..
[웹에서 데이터 가져오기] 3. GSON 1. 개요 앞서 JSON 포맷의 데이터를 다루었습니다. 그러나 해당 데이터는 그대로 사용하기엔 무리가 있습니다. 이때 GSON 라이브러리를 사용하면 JSON 객체를 직렬화 및 역직렬화할 수 있으며, 이를 통해 데이터를 처리할 수 있습니다. GSON 라이브러리는 JSON 문자열을 객체로 변환할 수 있도록 해줍니다. 2. 사용법 1) 라이브러리 추가 먼저 build.gradle의 dependencies 내부에 GSON 라이브러리를 추가해야 합니다. implementation 'com.google.code.gson:gson:2.8.6' 또한 인터넷을 사용하기 때문에 매니페스트 파일에 다음과 같이 코드를 추가합니다.
[웹에서 데이터 가져오기] 2. Volley 1. 개요 Volley는 안드로이드 앱에서 네트워킹을 더 쉽고 더 빠르게 하는 HTTP 라이브러리입니다. 이 라이브러리는 웹 요청과 응답을 단순화해줍니다. 2. 사용법 먼저 Request 객체를 만들고, 이 객체를 RequestQueue에 넣어줍니다. 그러면 RequestQueue가 알아서 스레드를 생성하여 서버에 요청하고 응답을 받아줍니다. 응답이 오면 RequestQueue에서 Request에 등록된 ResponseListener로 응답을 전달해줍니다. 또한 만일 응답을 받았을 때 처리할 메서드를 만들었다면 응답이 왔을 때 그 메서드가 자동으로 호출됩니다. 따라서 사용자는 별도의 스레드 관리뿐 아니라 UI 접근을 위한 Handler를 다룰 필요도 없습니다. 3. 예시 아래 코드를 통해 자세한 사용법을..

728x90
반응형