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

[JAVA][Android] SwipeRefreshLayout 사용하여 새로고침 기능 구현하기

by teamnova 2024. 10. 21.
728x90

안녕하세요

 

오늘은 SwipeRefreshLayout 을 사용하여, 새로고침 기능을 구현해보도록 하겠습니다.

 

SwipeRefreshLayout은 사용자가 화면을 위에서 아래로 스와이프 하여 새로고침할 수 있도록 만들어진 레이아웃입니다.

일반적으로 리스트나 데이터를 화면에 표시할 때, 화면을 아래로 당겨 새로고침을 할 수 있는 기능을 제공하기 위해 사용됩니다.

추가적으로 로딩 애니메이션을 제공해 데이터 로딩 중이라는 것을 사용자에게 시각적으로 나타낼 수 있습니다.

 

이번 포스팅에서는 SwipeRefreshLayout을 사용해 간단하게 새로고침 기능을 구현하는 방법을 알아보겠습니다.

 

우선build.gradle(Module: app) 파일에 AndroidX SwipeRefreshLayout 의존성을 추가합니다.

 

dependencies {
    
    implementation ("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")

}

 

 

전체 코드입니다.

 

MainActivity.java

public class MainActivity extends AppCompatActivity {

  private SwipeRefreshLayout swipeRefreshLayout;
  private ListView listView;
  private ArrayAdapter<String> adapter;
  private ArrayList<String> items;


  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    swipeRefreshLayout = findViewById(R.id.swipeRefreshLayout);
    listView = findViewById(R.id.listView);

    // 리스트에 표시할 데이터 초기화
    items = new ArrayList<>(Arrays.asList("아이템 1", "아이템 2", "아이템 3", "아이템 4", "아이템 5" ));
    adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items);
    listView.setAdapter(adapter);

    // 새로고침 동작 설정
    swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
      @Override
      public void onRefresh() {
        // 새 데이터를 로드하는 동작 시뮬레이션 (2초 지연 후)
        new Handler().postDelayed(new Runnable() {
          @Override
          public void run() {
            // 새로고침 후 아이템 추가
            items.add("새로운 아이템 " + (items.size() + 1));
            adapter.notifyDataSetChanged(); // 리스트 갱신

            // 새로고침 애니메이션 종료
            swipeRefreshLayout.setRefreshing(false);
          }
        }, 1000); // 1초 대기
      }
    });

  }
}

 

 

activity.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swipeRefreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

 

swipeRefreshLayout의 setOnRefreshListener 메소드를 사용하여, 새로고침 동작을 감지합니다.

 

그리고 새로고침시 할 동작을 지정후에, setRefreshing(false) 메소드로 새로고침 애니메이션을 종료해 줘야 합니다.

 

시연영상 입니다.