[Android] Paging3에서 데이터 없을 때 처리하기
·
Android/UI
Paging3는 PagingData를 PagingDataAdapter의 submitData로 전달하여 리스트를 표시한다. 만약 리스트에 표시할 데이터가 없는 경우 초기 화면을 표시해야 하지만,데이터가 없어도 PagingData는 null이나 empty로 내려오지 않는다. 이럴 때 PagingDataAdapter의 addLoadStateListener를 사용하면 데이터가 없을 때 처리를 할 수 있다.addLoadStateListener는 CombinedLoadState로 현재 PagingData의 로딩 상태를 관찰한다. CombinedLoadStates의 LoadState 정보는 다음과 같다.(참고)• append 목록의 끝에서 데이터를 로드하는 상태• prepend 목록의 시작 부분에서 데이터를 로드..
[Android] Glide, 모서리 둥글게 처리하기
·
Android/UI
.apply(RequestOptions.bitmapTransform(RoundedCorners(정수 값)))Glide를 사용해서 이미지를 표시할 때, 모서리를 둥글게 하려면 위의 코드를 추가하면 된다.Glide.with(this) .load(R.drawable.sample) .into(mBinding.ivMain)Glide.with(this) .load(R.drawable.sample) .apply(RequestOptions.bitmapTransform(RoundedCorners(80))) .into(mBinding.ivMain)
[Android] Paging3에서 아이템 삭제하기 + 로딩 처리
·
Android/UI
[Android] Paging3, 스크롤 시 로딩 화면 추가하기[Android] Paging3 + Room + Flow 사용하기 [Android] RecyclerView에서 페이징+삭제 처리하기 #2 (with Room) [Android] RecyclerView에서 페이징 처리하기 #1 RecyclerView에서 리스트를 스크롤하다가 어느 순간에 로딩 화면ogyong.tistory.com저번에 했던 스크롤 시 로딩 화면을 추가하는 것에 이어서Paging3에서 아이템을 삭제하고, 삭제가 처리되는 동안 로딩 화면을 띄우는 것을 해보려고 한다.Room 삭제 쿼리 추가@Daointerface SampleDao { ... /** * 아이템 삭제 */ @Query("DELETE..
[Android] Paging3, 스크롤 시 로딩 화면 추가하기
·
Android/UI
[Android] Paging3 + Room + Flow 사용하기[Android] RecyclerView에서 페이징+삭제 처리하기 #2 (with Room) [Android] RecyclerView에서 페이징 처리하기 #1 RecyclerView에서 리스트를 스크롤하다가 어느 순간에 로딩 화면이 뜨면서 리스트가 늘어나는 것을ogyong.tistory.com저번에 Paging3를 이용해서 리스트를 그려봤다.여기에 추가로 스크롤을 해서 다음 페이지를 호출할 때 로딩 화면을 그려보려고 한다. Paging3 라이브러리는 LoadState 클래스를 통해 데이터의 로드 상태를 추적할 수 있다.그리고 로드 상태가 변경되면 LoadState 값을 자동으로 알림 받는 LoadStateAdapter가 존재한다. 해당 글은..
[Android] Paging3 + Room + Flow 사용하기
·
Android/UI
[Android] RecyclerView에서 페이징+삭제 처리하기 #2 (with Room)[Android] RecyclerView에서 페이징 처리하기 #1 RecyclerView에서 리스트를 스크롤하다가 어느 순간에 로딩 화면이 뜨면서 리스트가 늘어나는 것을 본 적 있을 것이다. Adapter에서 등록된 list가 마지막에ogyong.tistory.com이전에 기기에 저장된 데이터를 RecyclerView와 Room을 사용해서 페이징 작업을 한 적이 있었다.이번에는 Paging3 라이브러리를 사용해서 기기에 저장된 데이터를 표시해보려고 한다.(삭제 기능은 다음에..) 참고로 Paging3는 Android Paging Basics codelab과 Android Paging Advanced codelab이..
[Android] RecyclerView에서 페이징+삭제 처리하기 (with Room) #2
·
Android/UI
[Android] RecyclerView에서 페이징 처리하기 #1RecyclerView에서 리스트를 스크롤하다가 어느 순간에 로딩 화면이 뜨면서 리스트가 늘어나는 것을 본 적 있을 것이다. Adapter에서 등록된 list가 마지막에 도달했을 때를 감지하여 로딩 화면을 띄우ogyong.tistory.com저번에 RecyclerView에서 문자열 배열이 저장된 파일을 이용해 페이징 처리를 해봤는데,이번에는 실제로 Room에 저장된 데이터의 페이징과 삭제 처리를 해보려고 한다.RecyclerView 페이징 예제예제에서 Room, ViewModel, LiveData, Coroutine, ViewBinding을 사용한다. 1부터 30까지의 값을 Room을 이용해서 기기에 저장한다.(데이터 저장은 별도로 구현하지..
[Android] 리스트에서 아이템 삭제 후 페이징할 때 조심할 점
·
작업 일지
RecyclerView의 addOnScrollListener를 사용해서 리스트의 마지막 위치가 표시될 때 다음 페이지에 대한 정보를 서버에 요청하여 페이징 작업을 하였다. 문제는 리스트에서 아이템을 삭제하고 다음 페이지에 대한 정보를 서버에 요청하면 아이템 하나가 사라지는 일이 생겼다. DB에 15개의 아이템이 있고, 1페이지에 5개씩 보인다고 가정하자. 4번 아이템을 삭제하게 되면 DB에 저장된 데이터는 아래 이미지처럼 변하게 된다. 여기서 문제가 발생한다. 4번을 삭제하고 2페이지를 호출하면 7~11까지의 아이템이 호출되어 6번 아이템을 볼 수가 없다. 삭제 api를 호출하여 아이템이 삭제되면 현재 페이지에 대한 리스트를 다시 호출을 한다. 현재 페이지에 추가된 마지막 값을 꺼내서 기존 리스트에 붙여..
[Android] RecyclerView에서 페이징 처리하기 #1
·
Android/UI
RecyclerView에서 리스트를 스크롤하다가 어느 순간에 로딩 화면이 뜨면서 리스트가 늘어나는 것을 본 적 있을 것이다.Adapter에서 등록된 list가 마지막에 도달했을 때를 감지하여 로딩 화면을 띄우고 다음 페이지를 호출하는 것이다. RecyclerView는 스크롤 상태와 리스트의 포지션에 대한 정보를 알려주는 addOnScrollListener 메서드를 제공한다.addOnScrollListener를 이용해서 페이징 처리를 해보려고 한다.RecyclerView 페이징 예제 1번 2번 3번 4번 5번 6번 7번 8번 9번 10번 11번 ..
[Android] DrawerLayout으로 Side Navigation 구현하기
·
Android/UI
DrawerLayout은 자식 레이아웃 중 하나를 펼치고 접는 기능을 하게 해주는 레이아웃이다. 자식 레이아웃 중 하나에 layout_gravity 속성을 start(left)나 end(right)를 부여하는 것으로 DrawerLayout을 쓸 수 있다.단, layout_gravity 속성을 가진 자식 레이아웃은 하나여야 하고 layout_height은 match_parent가 되어야 한다.(그렇지 않으면 런타임 에러가 발생한다.) drawer로 사용하기 위해 layout_gravity 속성을 지닌 자식 레이아웃 이외에 여러 개를 선언해 봤는데화면에는 마지막에 작성된 레이아웃만 보였다.DrawerLayout을 사용할 때 drawer로 표시할 레이아웃 하나와 메인 콘텐츠를 보여줄 레이아웃까지 해서자식 레이..
[Android] MQTT + SSL + MQTTX 사용해보기
·
Android/Network & Connecting
[Android] MQTT + MQTTX 사용해보기 안드로이드에서 MQTT 통신을 하는 방법은 아래와 같다. 1. org.eclipse.paho:org.eclipse.paho.client.mqttv3에서 제공하는 MqttClient 클래스 사용 2. org.eclipse.paho:org.eclipse.paho.android.service에서 제공하는 MqttAndroidCli ogyong.tistory.com 지난번에 SSL 인증 없이 MQTT를 사용해 봤는데, 이번에는 SSL 인증을 추가적으로 해보려고 한다. (이미 인증서를 가지고 있다고 가정) eclipse에서 MQTT 통신을 하도록 제공하는 클래스는 사용하지 않으려 한다. Android 12 버전부터 오류가 발생하는데, 이 부분을 해결한 hanne..
[Android] MQTT + MQTTX 사용해보기
·
Android/Network & Connecting
안드로이드에서 MQTT 통신을 하는 방법은 아래와 같다. 1. org.eclipse.paho:org.eclipse.paho.client.mqttv3에서 제공하는 MqttClient 클래스 사용 2. org.eclipse.paho:org.eclipse.paho.android.service에서 제공하는 MqttAndroidClient 클래스 사용 3. com.github.hannesa2:paho.mqtt.android에서 제공하는 MqttAndroidClient 클래스 사용 eclipse에서 제공하는 1, 2번을 사용할 경우 SSL 인증서를 인증하는 부분에서 문제가 발생한다. 해당 라이브러리는 업데이트가 진행되지 않아 Android 12 버전에서 오류가 뜬다. 이런 이유로 3번을 사용해서 MQTT 통신을 했..
[Android] ConstraintSet으로 View의 제약조건 수정하기
·
Android/UI
ConstraintSet은 xml에서 ConstraintLayout이 하는 동작을 코드 상으로 할 수 있게 해주는 클래스이다.앱에서 어떤 조건에 따라 한 레이아웃을 화면 상단에 배치하거나 하단에 배치하는 등의 연출이 가능하다. 예제로 버튼을 클릭했을 때 검정색 뷰의 위치를 옮겨보려고 한다.상단, 중단, 하단 텍스트가 존재하고 각 텍스트마다 이동 버튼이 존재한다.이동 버튼을 클릭하면 검정색의 뷰가 해당 텍스트 아래로 이동된다.참고 자료ConstraintSet 예제class MainActivity : AppCompatActivity() { private lateinit var mBinding: ActivityMainBinding override fun onCreate(savedInstanceSta..