안드로이드에서 당겨서 새로고침(SwipeRefreshLayout) 쉽게 구현하기

앱을 개발 하다보면 필수 기능중에 하나가 보고 있는 리스트나 상세 페이지등을 새로고침 하는 것 입니다.

몇년 전 까지만 하더라도 새로 고침 기능이라고 하면 아이폰 처럼 뷰를 당기면 공간이 벌어지면서 새로고침 하는 방식을 많이 사용 했습니다.(여전히 이 방법을 사용하는 앱은 많습니다.) 해당 새로고침을 기능을 제공 하려면 개발가 하나하나 구현 해야해서 쉽지 않은 기능 중 하나였습니다.
하지만 지금은 android 레이아웃중 SwipeRefreshLayout을 제공하여 레이아웃만 추가한다면 별다른 구현 없이도 위에서 아래로 내려오는 새로고침 기능을 사용 할수 있게 되었습니다.

SwipeRefreshLayout을 간단하게 구현하는 샘플 코드를 작성해 보겠습니다.

1단계 : 레이아웃

새로고침이 될 뷰를 SwipeRefreshLayout으로 자식뷰로 만듭니다.

      <android.support.v4.widget.SwipeRefreshLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/swipe_refresh">

            <WebView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/webView"></WebView>

        </android.support.v4.widget.SwipeRefreshLayout>
       


2단계 : 새로고침 이벤트

해당 뷰 영역을 위에서 아래로 당기면 SwipeRefreshLayout의 OnRefreshListener의 인터페이스를 통하여 onRefresh함수 가 호출됩니다.


        refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                //새로고침 소스
            }
        });

새로 고침이 완료 되었을 때는 꼭 setRefreshing 함수를 false 값으로 셋팅해 주어야 합니다.


       //새로고침 종료
       refreshLayout.setRefreshing(false);

아래는 실제 웹페이지를 로딩하고 새로고침한 소스입니다.


    private SwipeRefreshLayout refreshLayout = null;
    private WebView webView = null;

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

        refreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh);
        webView = (WebView) findViewById(R.id.webView);


        webView.setWebViewClient(new WebViewClient()
        {
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);

                refreshLayout.setRefreshing(false);

            }

        });

        refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                webView.reload();
            }
        });

        webView.loadUrl("http://devstory.ibksplatform.com/");

    }

새로 고침 함수가 호출되면 웹뷰를 다시 로딩 하고 로딩이 끝나면 새로고침 상태를 바꿔주는 것을 확인 할수 있습니다.


3단계 : 아이콘 색상 변경

setColorSchemaResources 함수를 통하여 새로고침 아이콘 색상을 변경 할수 있습니다. 인자 값을 보면 리소스ID를 여러개 넣을 수 있는 것을 확인 할수 있습니다. 넣은 인자값 순서대로 한바퀴 돌때 마다 색상이 변경 됩니다.


        refreshLayout.setColorSchemeResources(
                android.R.color.holo_orange_light,
                android.R.color.holo_blue_light
        );


새로고침 UI의 요구사항이 많거나 까다롭다고 한다면 SwipeRefreshLayout으로 부족할수 있지만 충분히 앱을 개발하는데 있어서는 편리한 레이아웃이 아닐까 생각 합니다.



댓글

댓글 쓰기

주간 인기글

[정보] 인스타그램은 당신의 소리를 '듣고' 있을 수도 있습니다

[Angular] 모델, 값이 바뀌었는데 화면 template 이 업데이트 되지 않을 때 조치 팁

[AWS] Lambda + API GateWay를 이용해 간단한 RESTful API 만들기 #1

[AWS] Lambda + API GateWay를 이용해 간단한 RESTful API 만들기 #2