最近玩啦一下Google的一个下拉刷新组件SwipeRefreshLayout,比自己之前写的下拉刷新要好的多,简单的做啦一个测试,
刚开始SwipeRefreshLayout里面嵌套一个ListVIew的时候,下拉刷新没有冲突,这个是毫无疑问的,但是SwipeRefreshLayout嵌套啦一个Framelayout之后就出问题了....
如下图的代码:
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swiperereshlayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
<ImageView
android:id="@+id/add"
android:background="@mipmap/add"
android:layout_marginRight="20dp"
android:layout_marginBottom="20dp"
android:layout_gravity="bottom|right"
android:layout_width="50dp"
android:layout_height="50dp" />
</FrameLayout>
</android.support.v4.widget.SwipeRefreshLayout>
问题怎么解决呢,就是一个设置一个监听ListView滑动监听器:
如下代码:
listview.setOnScrollListener(onScrollListener);/*滑动监听器*/
接着就是编写滑动监听器的关键代码了:
/*listView滑动*/
public AbsListView.OnScrollListener onScrollListener=new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
View firstView = view.getChildAt(firstVisibleItem);
if(firstVisibleItem ==0 && (firstView == null || firstView.getTop() == 0))
{
/*上滑到listView的顶部时,下拉刷新组件可见*/
swiperereshlayout.setEnabled(true);
}
else
{
/*不是listView的顶部时,下拉刷新组件不可见*/
swiperereshlayout.setEnabled(false);
}
}
};
跟其他的冲突的解决方法基本都是一样的思路,只要是ListView到达顶部的时候下拉刷新才可见,才能下拉,这样子,就不会说ListVIew还没上滑到顶部时,SwipeRefreshLayout就下拉刷新了,祝君好运!!!