android 在自定义的listview(有刷新加载项)列表中,数据过少时不能铺满整个屏幕时,header和footer同时显示问题

android  在自定义的listview(有刷新加载项)列表中,数据过少时,当刷新时,加载项也会显示,这是很头疼的一个问题,查阅了一些资料,总结了一个比较不错的方法:

 原来代码:

 1  @Override
 2     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
 3     this.firstVisibleItem = firstVisibleItem;
 4     this.lastVisibleItem = firstVisibleItem + visibleItemCount;
 5     this.totalItemCount = totalItemCount;
 6     }
 7 
 8     @Override
 9     public void onScrollStateChanged(AbsListView view, int scrollState) {
10     this.scrollState = scrollState;
11     
12     if (totalItemCount == lastVisibleItem&& scrollState == SCROLL_STATE_IDLE) {
13         if (!isLoading) {
14         isLoading = true;
15         footer.findViewById(R.id.load_layout).setVisibility(View.VISIBLE);
16         // 加载更多
17         iLoadListener.onLoad();
18         }
19     }
20 
21     }

通常大家通过这种方法来判断是否应该显示加载并访问网络数据等,但是当数据不足以布满全部时,下拉刷新后,(因满足条件)会同时触发加载事件,想要不触发加载事件,只有改变触发条件,一种思想是判断数据是否过少不能布满屏幕,但是这种思想太难用代码实现(小生刚刚学习android,经验不足),另一种思想是因为在刷新时不能显示加载布局,我们可以判断当前是否处于刷新状态来判断因不应该显示加载布局,而判断是否处于刷新状态我们可以利用header.getPaddingTop() == -headerHeight(headerHeight是hreader的高度)判断

请看代码

 1   @Override
 2     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
 3     this.firstVisibleItem = firstVisibleItem;
 4     this.lastVisibleItem = firstVisibleItem + visibleItemCount;
 5     this.totalItemCount = totalItemCount;
 6     }
 7 
 8     @Override
 9     public void onScrollStateChanged(AbsListView view, int scrollState) {
10     this.scrollState = scrollState;
11     if (header.getPaddingTop() == -headerHeight) {
12         flag = true;
13     } else {
14         flag = false;
15     }
16     if (totalItemCount == lastVisibleItem && flag && scrollState == SCROLL_STATE_IDLE) {
17         if (!isLoading) {
18         isLoading = true;
19         footer.findViewById(R.id.load_layout).setVisibility(View.VISIBLE);
20         // 加载更多
21         iLoadListener.onLoad();
22         }
23     }
24 
25     }

定义一个私有布尔变量flag,当header.getPaddingTop() == -headerHeight时,当前不在刷新状态,flag=true,满足显示加载布局的一个条件。

当处于刷新状态时,flag=false,不满足加载条件,所以解决了同时出现两个布局的问题。

  当然,大神们会有更好的办法。。本菜鸟只能想到这么多了,谢谢。。。。。。

原文地址:https://www.cnblogs.com/xiaotaoqi/p/5462267.html