activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <android.support.v4.widget.SwipeRefreshLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/swype_layout"
        android:layout_marginTop="10dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <ListView
            android:id="@+id/list_view"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />

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

</RelativeLayout>

MainActivity.java

import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.ActionBarActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ListView;

/**
 * 당겨서 새로고침 기능을 사용하기 위하여 SwipeRefreshLayout.OnRefreshListener를 구현한다.
 * 사용할 SwipeRefreshLayout을 가져온다.
 * @author sh jin
 * @since 2015/03/09
 */
public class MainActivity extends ActionBarActivity implements SwipeRefreshLayout.OnRefreshListener{
    private SwipeRefreshLayout mSwipeRefresh;
    private ListView mListView;

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

        mSwipeRefresh = (SwipeRefreshLayout)findViewById(R.id.swype_layout);
        mListView = (ListView)findViewById(R.id.list_view);

        //리스너를 달아줍니다.
        mSwipeRefresh.setOnRefreshListener(this);
        //새로고침시 돌아가는 애니메이션의 색상을 지정합니다. int color를 넣어준 순서대로 효과가 적용 됩니다.
        mSwipeRefresh.setColorSchemeColors(R.color.color1, R.color.color2, R.color.color3, R.color.color4);
    }

    /**
     * 새로고침시 호출되는 메서드입니다.
     * SwipeRefreshLayout안에 들어있는 리스트뷰나 그리드뷰 같은 뷰들을 최상단에서 아래로 당겼을때 호출이 됩니다.
     */
    @Override
    public void onRefresh() {
        //새로고침시 이벤트 구현

        //새로고침 작업이 끝나고 애니메이션효과도 닫혀야 되기 때문에 setRefreshing(false)로 하여 작업을 종료합니다.
        mSwipeRefresh.setRefreshing(false);
    }
}

* 추가로 ViewPager와 SwipeRefreshLayout을 같이 사용할 경우, 스크롤 이벤트가 잘못되어 부자연스럽게 움직일 때가 있습니다. 이럴때 해결방법은 ViewPager에 onTouch함수를 매핑해주면 해결 할 수 있습니다.

      ViewPager mPager = (ViewPager) findViewById(R.id.pager);
        mPager.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                mSwipeRefresh.setEnabled(false);
                switch (event.getAction()) {
                    case MotionEvent.ACTION_UP:
                        mSwipeRefresh.setEnabled(true);
                        break;
                }
                return false;
            }
        });

Posted by 신공표 트랙백 0 : 댓글 0

댓글을 달아 주세요