📝TIL
SwipeRefreshLayout
- API를 호출하여 받아온 정보를 RecyclerView에 표시하는 과정에서 네트워크/서버 오류로 인해 API 결과값을 받아오지 못한 경우,
RecyclerView를 아래로 스와이프하여 새로고침(API 재호출)을 하는 기능을 구현하기 위해 SwipeRefreshLayout을 사용해보았다.
📌참고자료
- build.gradle(app)에 dependency 추가하기
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
- 레이아웃 xml파일에서, 아래로 스와이프 했을 때 새로고침이 적용될 레이아웃을 SwipeRefreshLayout 태그로 감싸기
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipe_tourist_attraction_recycler_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="70dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_tourist_attraction_recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:listitem="@layout/item_place_list" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
- Kotlin 파일에서, SwipeRefreshLayout의 setOnRefreshListener에 아래로 스와이프 되었을 때 수행될 로직 정의하기
- 로직 맨 마지막에 isRefreshing = false로 변경해주어야 함!!
binding.swipeTouristAttractionRecyclerView.setOnRefreshListener {
mainModel.loadOrFetchTouristAttractionList()
binding.swipeTouristAttractionRecyclerView.isRefreshing = false
}