基本用法
xml布局
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/shop_scrollview_list"
android:layout_above="@+id/shoplistdi"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/shop_list_shop"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@color/B5"
android:dividerHeight="1dp"
>
</ListView>
</android.support.v4.widget.SwipeRefreshLayout>
代码
//设置刷新时动画的颜色,可以设置4个
mSwipeRefreshThe.setColorSchemeResources(android.R.color.holo_red_dark);
//设置下拉刷新
mSwipeRefreshThe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
getDataFromServer();
}
});
埋藏的坑
一 . 只能支持可以滚动的布局
ScrollView view;
ListView view1;
RecyclerView view2;
GridView view3;
二 . 如果出现嵌套布局的话,会出现滑到中间的时候也会下拉刷新,但是我们想要的效果是,当在最顶部的时候才可以下拉刷新,所以需要加判断
//如果是第一个显示的时候才可以下拉刷新,而且加入空布局的话还需要对于totalItemCount 进行判断
if (totalItemCount > 0) {
boolean enable = false;
if (anngridview != null && anngridview.getChildCount() > 0) {
// check if the first item of the list is visible
boolean firstItemVisible = anngridview.getFirstVisiblePosition() == 0;
// check if the top of the first item is visible
boolean topOfFirstItemVisible = anngridview.getChildAt(0).getTop() == 0;
// enabling or disabling the refresh layout
enable = firstItemVisible && topOfFirstItemVisible;
}
mSwipeRefreshThe.setEnabled(enable);
}
三. 当使用嵌套布局的时候,尤其是ListView当数据为空的时候,需要把空界面显示出来,这时候ScrollView +LinearLayout, 只会显示半屏,这算ScrollView 的用法了,最后的解决办法是,在ScrollView 中加入这个属性.
android:fillViewport="true"