listview的用法都不用说了吧,listview的适配器及优化。
1.首先创建一个类继承listview.并实现他的构造方法。三个都要实现 。
2.然后创建一个方法,并在方法中加载视图,然后把视图加载到listview的底部,用于加载所需要的数据。
3.三个构造方法都要都要调用这个方法。
4.实现listview的滑动事件。、
5,创建接口,创建抽象方法。
下面是主要代码;
<pre name="code" class="java"><span style="font-family:SimSun;font-size:14px;">package com.example.ezamhuanxin;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ListView;
/**
* Created by 孙贝贝 on 2016/9/26.
*/
public class Food extends ListView implements OnScrollListener {
// 第一个条目的索引
private int lfirstVisibleItem;
// 最后的条目的索引
private int lastVisibleItem;
// 总的条目数
private int ltotalItemCount;
private boolean isloading = true;
private InterfactDate interfactDate;
private View view;
public Food(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initview();
}
public Food(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
initview();
}
public Food(Context context) {
super(context);
// TODO Auto-generated constructor stub
initview();
}
private void initview() {
this.setOnScrollListener(this);
view = LayoutInflater.from(getContext()).inflate(R.layout.foot, null, false);
this.addFooterView(view);
view.setVisibility(View.INVISIBLE);
}
// visibleItemCount显示的条目数
//滚动完成后的一个状态 ,通过这个方法能拿到当前的一些值和状态
/*firstVisibleItem:第一个显示的条目 12
* visibleItemCount:显示的条目个数 8
* totalItemCount:总共的条目数: 20
*
* 所以说当firstVisibleItem+visibleItemCoun=totalItemCount这个时候 就说明滑动到底了,该加载数据了
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
lfirstVisibleItem = firstVisibleItem;
lastVisibleItem = visibleItemCount + firstVisibleItem;
ltotalItemCount = totalItemCount;
}
//这个方法是当滚动状态变化的时候触发
/*
* scrollState就是当前的状态
*/
@Override
public void onScrollStateChanged(final AbsListView view, int scrollState) {
// 当滑动的状态停顿的时候
if (scrollState == SCROLL_STATE_IDLE) {
// 当最后一个的条目的数和总的条目数相同的时候
if (lastVisibleItem == ltotalItemCount) {
System.out.println("已经到最后了");
if (isloading) {
isloading = false;
view.setVisibility(View.VISIBLE);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
interfactDate.setData();
isloading = true;
view.setVisibility(View.INVISIBLE);
}
}, 2000);
}
}
}
}
public interface InterfactDate {
void setData();
}
public void setInterface(InterfactDate date) {
interfactDate = date;
}
}</span>
下面是在Mainactivity中的加载;
private void loadMore(){
for(int a=0;a<6;a++){
list.add("大家好"+a);
}
adapter.notifyDataSetChanged();
}
private void initview(){
food=(Food)findViewById(R.id.listview);
food.setInterface(new InterfactDate(){
@Override
public void setData(){
loadMore();
}
});
}<span style="color:#6633ff;">
</span>