AndroidアプリにおけるPull-To-Refresh(引っ張って更新)ビューを簡単に導入できるAndroid-PullToRefreshというライブラリがあります。Android Support Library, revision 19.1.0 以降のSwipeRefreshLayoutで同様のことが実現できるようなのですが、どうしてもAndroid-PullToRefreshを利用する必要がありました。ちょっと古めのライブラリのせいか、Android Studioから使用する方法が分かりづらかったのでまとめておきます。
なお、このAndroid-PullToRefreshは既にDEPRECATEDになってますので、その点を踏まえて使用するのがよいかとおもいます。
環境
- Android Studio 1.5
導入手順
まずはライブラリをgit cloneします。プロジェクトディレクトリ(git init済み)の直下で、以下のコマンドを叩きます。
1 2 |
$ mkdir modules $ git submodule add git@github.com:chrisbanes/Android-PullToRefresh.git modules/Android-PullToRefresh |
modules以下にAndroid-PullToRefreshがダウンロードされます。
次に、 Project Structureダイアログを開きます。
ダイアログの +ボタンをクリックします。
Import Eclipse ADT Projectを選択してNextへ。
次に、さきほどgit submodule化したディレクトリ(プロジェクト/modules/Android-PullToRefresh)直下のlibraryを指定します。 Module nameは任意です。
最後のダイアログはデフォルトのままでOKです。
Gradleビルドが自動的に始まりますが、Android-PullToRefreshのビルドに必要なバージョンのBuild Toolがインストールされていない場合は、下図の通りエラーになります。リンクをクリックしてインストールします。
Build Toolをインストールしたら、Gradleビルドは成功するはずです。
続いて、プロジェクトの依存関係を設定します。先ほどの Project Structureを開き、Modulesのappを選択→Dependenciesタブを選択→+ボタンをクリック→Module dependencyを選択して、先ほど命名したモジュール名を選択します。
サンプル
ちゃんと使えるか、サンプルを作成してみます。以下のようなアクティビティのレイアウトにPullToRefreshListViewを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?xml version="1.0" encoding="utf-8"?> <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" tools:context="itmammoth.testpulltorefresh.MainActivity"> <com.handmark.pulltorefresh.library.PullToRefreshListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/listView" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> </RelativeLayout> |
アクティビティのコードです。
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
package itmammoth.testpulltorefresh; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.ArrayAdapter; import android.widget.ListView; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshListView; public class MainActivity extends AppCompatActivity { protected PullToRefreshListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (PullToRefreshListView) findViewById(R.id.listView); listView.setMode(PullToRefreshBase.Mode.BOTH); listView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() { @Override public void onRefresh(PullToRefreshBase<ListView> refreshView) { Log.d("onRefresh", "引っ張られたよ"); new LoadTask().execute(); } }); String[] members = new String[30]; for (int i = 0; i < 30; i++) { members[i] = "item" + (i + 1); } ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, members); listView.setAdapter(adapter); } private class LoadTask extends AsyncTask<Void, Void, String[]> { @Override protected String[] doInBackground(Void... params) { // データ取得処理 return new String[0]; } @Override protected void onPostExecute(String[] strings) { Log.d("onPostExecute", "更新完了"); listView.onRefreshComplete(); super.onPostExecute(strings); } } } |
setOnRefreshListenerとsetMode以外は普通のListViewと変わりません。なお、 listView.setMode(PullToRefreshBase.Mode.BOTH)というのは、画面の上下共に引っ張っれるようにするためのオプションです。
これで最低限の設定は完了なので、あとはゴリゴリ書くだけです。
関連する記事
- ViewPager + TabLayout + AdMob コード例
- 【Android】フリックイベントを実装する
- 【Android】リストビューの自動スクロール機能を実装する
- 「で、結局オブジェクト指向って何が良いわけ?」という手続き型脳の貴男へ
- 【Android】10回に1回インタースティシャル広告を表示する