[Android] Support Library に追加された SwipeRefreshLayout

| トラックバック(0) |

Android Support Library, revision 19.1.0SwipeRefreshLayout が追加されました。

SwipeRefreshLayout とは、下方向のスワイプジェスチャーを検出してプログレスを表示するためのもので、

アプリの情報更新手段として使用できます。

類似の機能は、これまでは各アプリ独自に実装していたと思いますが、Support Library を使用することで、簡単に使用できます。

 

SwipeRefreshLayout

 

使い方

1. SwipeRefreshLayout#setOnRefreshListener() を呼び出し、スワイプ時のリスナを登録する

2. スワイプ時に呼び出されるリスナ SwipeRefreshLayout.OnRefreshListener#onRefresh() で更新中の処理を行う

3. 更新後、SwipeRefreshLayout#setRefreshing(false) でプログレスを終了させる

 

※a. SwipeRefreshLayout#setRefreshing(true) を呼び出す事で、メニューアイテム押下時など、

 スワイプ以外の任意のトリガでもプログレスを開始できる

※b. SwipeRefreshLayout#setColorScheme() を呼び出す事で、プログレスの色もカスタマイズできます

 

サンプル

サンプルアプリは、sdk / extras / android / support / samples / Support4Demos にありました(上記動画)。

以下、Support4Demos 内のソースコード(Apache License, Version 2.0)の抜粋です。

 

サンプルリソース(swipe_refresh_widget_sample.xml)

<android.support.v4.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swipe_refresh_widget"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/content"/>
</android.support.v4.widget.SwipeRefreshLayout>

 

サンプルソースコード(SwipeRefreshLayoutActivity.java)

public class SwipeRefreshLayoutActivity extends Activity implements OnRefreshListener {
    public static final String[] TITLES =
    {
            "Henry IV (1)",
            "Henry V",
・・・省略・・・
             "Othello",
            "King Lear"
    };
    private SwipeRefreshLayout mSwipeRefreshWidget;
    private ListView mList;
    private Handler mHandler = new Handler();
    private final Runnable mRefreshDone = new Runnable() {

        @Override
        public void run() {
            // 3. プログレスを終了させる
            mSwipeRefreshWidget.setRefreshing(false);
        }

    };
    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.swipe_refresh_widget_sample);
        mSwipeRefreshWidget = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_widget);
        mSwipeRefreshWidget.setColorScheme(R.color.color1, R.color.color2, R.color.color3,
                R.color.color4);
        mList = (ListView) findViewById(R.id.content);
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, android.R.id.text1, TITLES);
        mList.setAdapter(arrayAdapter);
        // 1. スワイプ時のリスナを登録する(implements OnRefreshListener)
        mSwipeRefreshWidget.setOnRefreshListener(this);
    }

    @Override
    public void onRefresh() {
        // 2. スワイプ時に呼び出される、ここで更新中の処理を行う
        refresh();
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.swipe_refresh_menu, menu);
        return true;
    }

    /**
     * Click handler for the menu item to force a refresh.
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        final int id = item.getItemId();
        switch(id) {
            case R.id.force_refresh:
                // a. メニューアイテム押下時など、スワイプ以外の任意のトリガでもプログレスを開始できる
                mSwipeRefreshWidget.setRefreshing(true);
                refresh();
                return true;
        }
        return false;
    }

    private void refresh() {
        // このアプリでは更新処理のダミーとして1秒後に更新終了処理を呼び出している
        mHandler.removeCallbacks(mRefreshDone);
        mHandler.postDelayed(mRefreshDone, 1000); // 3000にすると3秒間プログレスが表示されるよ
    }
}

 

あわせて読みたい

関連記事

トラックバック(0)

トラックバックURL: http://mt.adakoda.com/mt-tb.cgi/613

2014年3月

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31