본문 바로가기
안드로이드 자바

[Java][Android] SwipeRefreshLayout

by teamnova 2022. 11. 4.
728x90

안녕하세요.

오늘은 리스트뷰나 리사이클러뷰에서 사용할 수 있는 새로고침 기능을 알아보겠습니다.

 

페이스북이나 인스타그램 앱을 사용하다보면 아래로 당겨서 새로운 게시글을 조회한 적이 있을텐데, 바로 그 기능입니다.

 

1. 먼저 모듈 단위 Gradle에 dependencies 설정에 다음을 추가해줍니다.

ex) build.gradle(Module:myproject.app)

dependencies {
	implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" //스와이프 레이아웃
 }

2.  적용할 RecyclerView를 SwipeRefreshLayout으로 감싸줍니다.

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    android:id="@+id/swipe"
    android:layout_width="match_parent"
    android:layout_height="600dp"
    android:layout_marginTop="16dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/tv_list"
    app:layout_constraintVertical_bias="0.0">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rv_live"
        android:layout_width="match_parent"
        android:layout_height="600dp"
        android:padding="7dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tv_list" />

</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

 

3. 해당 화면 액티비티에 onRefreshListener 등록

public class ListActivity extends AppCompatActivity {

	private SwipeRefreshLayout swipeRefreshLayout;
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
   
        swipeRefreshLayout = findViewById(R.id.swipe);
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
            	// 새로고침시 할 동작. 화면에서 아래로 드래그 하고 놓았을 때 호출 됩니다.
        		// 이때 새로고침 화살표가 돌아갑니다.
                list.clear();
                livelist(); //서버로부터 목록을 조회하는 본인의 로직 작성
                
                //새로고침 종료시키기. 꼭 false로 해주어야 새로고침 동작이 종료됩니다!!
                swipeRefreshLayout.setRefreshing(false);
            }
        });
        
    }
}