android_如何巧妙在Listview滑动时将头部固定

ListView增加头部,并且该头部在随着ListView滑动时需要固定,下拉刷新采用的是android5的SwipeRefresh。
实现方案:
在顶部增加一个跟ListView头部一模一样
在ListView的onScroll中,判断firstVisibleItem>=0时,就将固定在顶部的布局mLayoutMsgOperate显示出来
(mLayoutMsgOperate显示的时机是firstVisibleItem>=0)
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
    if (firstVisibleItem >= 0) {
        mLayoutMsgOperate.setVisibility(View.VISIBLE);//显示顶部固定部分
    } else {
        mLayoutMsgOperate.setVisibility(View.GONE);//隐藏顶部固定部分
    }
}
但是这样操作会导致一个问题,那就是SwipeRefreshLayout在做下拉刷新时,下拉圈就会被固定部分挡住,如下图所示:
问题出现的原因就在onScroll方法的判断中,因为firstVisibleItem>=0,当可见时,并且还没有上拉,默认情况下就是firstVisibleItem>=0条件成立的,所以一开始顶部固定部分就显示,所以在下拉刷新时,下拉控件就会固定部分挡住。
解决这个问题,可以给ListView再添加一个头部,也就是随便创建一个View对象给ListView,然后addHeader即可!代码如下:

在onScroll方法中的if判断条件作一下调整,因为添加了一个view作为头部,那么默认情况第一个可见的视图就是我们刚刚添加的view,所以固定部分视图可见的条件就变为firstVisibleItem>0了。
(mLayoutMsgOperate显示的时机是firstVisibleItem>0)
 
   
运行效果图:有什么不对,请评论指正!谢谢
 
   

你可能感兴趣的:(Android)