[내일배움캠프] 캠프 17주차 - 3/14(목) #SwipeRefreshLayout

0
post-thumbnail

📝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() // ViewModel의 API 재호출 함수 호출

    binding.swipeTouristAttractionRecyclerView.isRefreshing = false
}
profile
Be able to be vulnerable, in search of truth

0개의 댓글