SwipeRefreshLayout

요즘 어플리케이션들을 보면 아래로 당겨서 화면을 새로 로딩하는 기능이 많죠. 이런 기능을 담당하는 것이 SwipeRefreshLayout입니다. 그래서 아래로 당기면 아래처럼 로딩하는 화면(빙글 빙글 돌아가는 로딩화면)이 나온 이후에 로딩이 완료되면 어플리케이션의 정보를 갱신해줍니다.

 

 

SwipreRefreshLayout을 사용하기 위해서는 build.gradle 파일에 아래처럼 종속 항목을 명시해줍니다. 

build.gradle

 

build.gradle

dependencies {
	//...
    implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
    //...
}

 

현재 안정화버전은 1.1.0버전이기 때문에 1.1.0버전을 사용하도록 하겠습니다. 추후에 안정화버전이 변경될 수 있으니 안드로이드 개발 문서를 참고해주시기 바랍니다.

https://developer.android.com/jetpack/androidx/releases/swiperefreshlayout?hl=ko#1.1.0 

 

Swiperefreshlayout  |  Android 개발자  |  Android Developers

Swiperefreshlayout 스와이프하여 새로고침 UI 패턴을 구현합니다. 최근 업데이트 현재 안정화 버전 다음 버전 후보 베타 버전 알파 버전 2020년 7월 22일 1.1.0 - - 1.2.0-alpha01 종속 항목 선언 SwipeRefreshLayout

developer.android.com

 

이제 sync를 하고 나면 벌써 사용할 준비는 끝이 났습니다. 이제 메인화면을 구성할 activity_main.xml을 만들어줍시다.

activity_main.xml

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id='@+id/refresh_layout'>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:id="@+id/text_view"
            android:text="아래로 당겨보세요."/>
    </RelativeLayout>

</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

 

SwipeRefreshLayout에 새로고침이 될 레이아웃을 추가하였습니다. 저는 간단히 RelativeLayout안의 TextView의 텍스트를 새로운 데이터로 고쳐보도록 하겠습니다. 이것을 프로그램한것이 MainActivity에 존재합니다.

MainActivity.java 

import androidx.appcompat.app.AppCompatActivity;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;

import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private SwipeRefreshLayout swipeRefreshLayout;
    private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        swipeRefreshLayout=(SwipeRefreshLayout)findViewById(R.id.refresh_layout);
        textView=(TextView)findViewById(R.id.text_view);

        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                textView.setText("새로 고침 완료");
                swipeRefreshLayout.setRefreshing(false);
            }
        });
    }
}

 

누가봐도 매우 간단한 코드네요. SwipeRefreshLayout에 OnRefreshListener를 추가해주면 새로고침이 시작되었을때 onRefresh 메소드가 호출이 됩니다. 이때 다시 로드하는 코드를 추가하여 주고 setRefreshing에 false를 전달하여 로딩중인 화면을 없애주면 됩니다.

 

실행하면 화면이 로딩된 이후 TextView에서 로딩이 완료되었다는 메시지와 함께 Refreshing을 중지합니다.

 

만약 쓰레드를 이용하면 onRefresh에 쓰레드를 실행하여 Handler를 통해 완료 메시지를 받으면 여기서 setRefreshing을 false로 전달해주면 됩니다. 

반응형
블로그 이미지

REAKWON

와나진짜

,