今回は前回に続いて、ListViewについての記事を書く。
ListViewのRefreshするUIついて、色々な方法があると思うが、
今回はListViewを下にSwipeすることでRefreshができるSwipeRefreshLayoutを使ってみた。
SwipeRefreshLayoutは、Support Library revision 19.1.0から追加された。
Android Studioで開発を行い、SourceはGitHubで公開している。
前回のListViewの記事のSourceにMergeしている。
簡単に流れを下記に示す。
1. Layoutの設定
SwipeさせたいViewを囲む形のLayoutとなる。
ポイントはEmptyViewで、ListViewの隣にTextViewを並べたものでは表示がされなかった。
空の時にもSwipeでRefreshはさせたいので、もう一つSwipeRefreshLayoutを用意して
EmptyViewを含める必要があった。
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/refresh" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" /> </android.support.v4.widget.SwipeRefreshLayout> <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/refreshEmptyView" android:layout_width="match_parent" android:layout_height="match_parent"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/emptyView" android:text="@string/empty" android:layout_width="match_parent" android:layout_height="0dp" android:layout_gravity="center" android:gravity="center" /> </ScrollView> </android.support.v4.widget.SwipeRefreshLayout> </FrameLayout>
2. SwipeRefreshLayoutのListenerとLoading時の色の設定
mSwipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.refresh); mSwipeRefreshEmptyViewLayout = (SwipeRefreshLayout) view.findViewById(R.id.refreshEmptyView); setSwipeRefreshLayout(mSwipeRefreshLayout); setSwipeRefreshLayout(mSwipeRefreshEmptyViewLayout);
private void setSwipeRefreshLayout(SwipeRefreshLayout swipeRefreshLayout){ swipeRefreshLayout.setOnRefreshListener(mOnRefreshListener); swipeRefreshLayout.setColorSchemeResources(R.color.red, R.color.green, R.color.blue, R.color.yellow); }
3. EmptyViewの設定
EmptyView用のSwipeRefreshLayoutをListViewに設定する。
mListView = (ListView) view.findViewById(R.id.listView); mListView.setEmptyView(mSwipeRefreshEmptyViewLayout); mListView.setAdapter(mAdapter);
4. ListViewのRefresh
今回は、HandlerでWaitをいれた。
setRefreshingでfalseを入れると、SwipeRefreshLayoutの表示が解除される。
private SwipeRefreshLayout.OnRefreshListener mOnRefreshListener = new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { new Handler().postDelayed(new Runnable() { @Override public void run() { ImageCache.clearCache(); refreshListViewData(); mAdapter.notifyDataSetChanged(); mSwipeRefreshLayout.setRefreshing(false); mSwipeRefreshEmptyViewLayout.setRefreshing(false); } }, 3000); } };
0 件のコメント :
コメントを投稿