SwipeRefreshLayoutをRecyclerViewでKotlinで実装します
SwipeRefreshLayoutとは
ListViewやRecyclerViewなどで通信して取得するdataを再取得するためのレイアウトです。
ListViewを上部から引っ張るとProgressBarが表示されます。
その実装方法を解説します。
SwipeRefreshLayoutをxmlに定義
今回は、RecyclerView内に実装します。
RecyclerViewの実装方法はこちら
1 2 3 4 5 6 7 8 9 10 |
<android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swipe_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/play_list_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </android.support.v4.widget.SwipeRefreshLayout> |
SwipeRefreshLayoutはapi level 22.1.0からですが、
support libraryがあります。
app build.gradleの設定
1 2 3 |
dependencies { com.android.support:support-core-ui:27.0.0 } |
SwipeRefreshLayoutをFragmentでインスタンス化する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
val root = inflater.inflate(R.layout.fragment_play_list, container, false) // set up view with(root) { recyclerView = findViewById<RecyclerView>(R.id.play_list_view).apply { adapter = listAdapter layoutManager = LinearLayoutManager(context) } // swipe refresh layout swipeRefreshLayout = findViewById<SwipeRefreshLayout>(R.id.swipe_layout).apply { setColorSchemeColors( android.support.v4.content.ContextCompat.getColor(activity, R.color.colorPrimary), android.support.v4.content.ContextCompat.getColor(activity, R.color.colorAccent), android.support.v4.content.ContextCompat.getColor(activity, R.color.colorPrimaryDark) ) setOnRefreshListener { loadPlayList(listAdapter, true) } } // progressBar progressBar = findViewById(R.id.progress_bar) } |
SwipeRefreshLayoutの関数
setColorSchemeColors
インジケータの色の設定をします。
setOnRefreshListener
リフレッシュ動作を行った時に呼び出される関数のリスナーをセットします。
ここでは、remoteからデータを取得するloadPlayList関数を読み込んでいます。
インジケーターの表示を消す
リフレッシュ動作が終了した時には、インジケータを非表示にする必要があります。
表示・非表示を管理しているboolean isRefreshingを切り替えます。
1 |
swipeRefreshLayout.isRefreshing = false |
以上です。