自定义ListView加载更多

一、自定义ListView
public class CustomListView extends ListView implements AbsListView.OnScrollListener {

private View footView;
private Context context;

private int totalItemCount;//总的条目
private int lastVisibleItem;//最后可见的item
private boolean isLoading = true;//正在加载

private ILoadMoreListener loadMoreListener;

public void setLoadMoreListener(ILoadMoreListener loadMoreListener) {
this.loadMoreListener = loadMoreListener;
}

public CustomListView(Context context) {
this(context, null);
}

public CustomListView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
initView();
}

/**
* 加载底部布局
*/
private void initView() {
footView = View.inflate(context, R.layout.view_foot, null);
footView.findViewById(R.id.footView).setVisibility(View.GONE);
this.addFooterView(footView);
this.setOnScrollListener(this);
}

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (lastVisibleItem == totalItemCount && scrollState == SCROLL_STATE_IDLE) {//最后一个item并且停止滚动
if (isLoading) {//正在加载
isLoading = false;
footView.findViewById(R.id.footView).setVisibility(VISIBLE);
//加载更多
loadMoreListener.loadMore();
}
}
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
this.lastVisibleItem = firstVisibleItem + visibleItemCount;
this.totalItemCount = totalItemCount;
}

/**
* 加载完成
*/
public void loadComplete() {
isLoading = true;
footView.findViewById(R.id.footView).setVisibility(GONE);
}

public interface ILoadMoreListener {
void loadMore();
}

}

二、在activity中使用
public class MainActivity extends AppCompatActivity implements CustomListView.ILoadMoreListener{

private CustomListView listView;
private List<String> strList;
private MyBaseAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (CustomListView) findViewById(R.id.listView);

strList = new ArrayList<>();
for (int i = 0; i < 20; i++) {
strList.add("测试" + (i + 1));
}
adapter = new MyBaseAdapter(this, strList);
listView.setAdapter(adapter);
listView.setLoadMoreListener(this);

}

@Override
public void loadMore() {

//模拟从服务器拿去数据
Handler handler=new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {

for (int i = 0; i < 20; i++) {
strList.add("测试加载更多" + (i + 1));
}
adapter.notifyDataSetChanged();
listView.loadComplete();
}
},2000);

}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值