实现简单的listview分页加载,效果如下图所示:
ListView显示预加载的10个Item,往上拉动每次加载2个Item;
自定义类LoadListView继承ListView,实现OnScrollListener接口,重写它的两个方法,在类里面定义一个加载更多数据的回调接口;
public class LoadListView extends ListView implements OnScrollListener
{
View footer; //底部布局;
int lastVisibleItem; //最后一个可见的item;
int totalItemCount; //总的数量;
boolean isLoading; //正在加载;
ILoadListener iLoadListener;
public LoadListView(Context context)
{
super(context);
initShow(context);
}
public LoadListView(Context context, AttributeSet attrs)
{
super(context, attrs);
initShow(context);
}
//加载底部布局;
private void initShow(Context context)
{
LayoutInflater inflater = LayoutInflater.from(context);
footer = inflater.inflate(R.layout.footer_layout, null);
footer.findViewById(R.id.layout).setVisibility(View.GONE);
this.addFooterView(footer);
this.setOnScrollListener(this);
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState)
{
if(totalItemCount == lastVisibleItem && scrollState == SCROLL_STATE_IDLE) //滚动状态;
{
if(!isLoading)
{
isLoading = true;
footer.findViewById(R.id.layout).
setVisibility(View.VISIBLE);
iLoadListener.onload(); //加载更多数据;
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount)
{
this.lastVisibleItem = firstVisibleItem + visibleItemCount;
this.totalItemCount = totalItemCount;
}
public void setLoadListener(ILoadListener iLoadListener)
{
this.iLoadListener = iLoadListener;
}
//加载完成;
public void setComplete()
{
isLoading = false;
footer.findViewById(R.id.layout).
setVisibility(View.GONE);
}
//加载更多数据的回调接口;
public interface ILoadListener
{
public void onload();
}
}
footer_layout布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:gravity="center"
>
<ProgressBar
style="?android:attr/progressBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:text="正在加载……"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
</LinearLayout>
MainActivity中实现LoadListView中的ILoadListener接口:
public class MainActivity extends Activity implements ILoadListener
{
MyAdapterTel myAdapter;
LoadListView listView;
List<TelContent> list = new ArrayList<TelContent>(); //店铺集合;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getData(); //预加载的数据;
showListView(list); //显示预加载的数据;
}
private void showListView(List<TelContent> list)
{
if(myAdapter == null)
{
listView = (LoadListView)findViewById(R.id.filemgr_all_listView);
listView.setLoadListener(this); //设置接口监听;
myAdapter = new MyAdapterTel(this, list);
listView.setAdapter(myAdapter);
}
else
{
myAdapter.onDateChange(list);
}
}
//预加载的数据;
private void getData()
{
for(int i=0; i<10; i++)
{
TelContent telContent = new TelContent();
telContent.setId(i);
telContent.setShop("aaa" + i);
telContent.setTel("7777" + i);
list.add(telContent);
list.get(i).toString();
}
}
//每次加载的数据;
private void getLoadData()
{
for(int i=0; i<2; i++)
{
TelContent telContent = new TelContent();
telContent.setId(i);
telContent.setShop("aaa" + i);
telContent.setTel("7777" + i);
list.add(telContent);
}
}
@Override
public void onload()
{
Handler handler = new Handler();
handler.postDelayed(new Runnable() //方便显示加载数据的效果,延时2000mm执行;
{
@Override
public void run()
{
getLoadData(); //加载数据;
showListView(list); //更新listView界面;
listView.setComplete();//隐藏footer;
}
}, 2000);
}
}
TelContent封装类:
package com.lu.list;
public class TelContent
{
private String shop; //店铺名;
private String tel; //店铺电话;
private Integer id; //通讯种类;
public String getShop() {
return shop;
}
public void setShop(String shop) {
this.shop = shop;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Override
public String toString()
{
return "id=" + id + ", shop=" + shop + ", tel=" + tel;
}
}
Adapter适配器:
package com.lu.list;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class MyAdapterTel extends BaseAdapter
{
TextView telmgr_tel_tv; //电话;
TextView telmgr_title_tv; //店铺;
List<TelContent> list; //店铺集合;
LayoutInflater inflater;
public MyAdapterTel(Context context, List<TelContent> listTel)
{
inflater = LayoutInflater.from(context);
this.list = listTel;
}
//数据刷新;
public void onDateChange(List<TelContent> listTel)
{
this.list = listTel;
this.notifyDataSetChanged();
}
@Override
public int getCount()
{
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
convertView = inflater.inflate(R.layout.items_layout, null);
telmgr_title_tv = (TextView)convertView.findViewById(R.id.telmgr_title_tv);
telmgr_tel_tv = (TextView)convertView.findViewById(R.id.telmgr_tel_tv);
telmgr_title_tv.setText(list.get(position).getShop());
telmgr_tel_tv.setText(list.get(position).getTel());
return convertView;
}
}
items_layout列表布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/telmgr_title_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="17sp"
android:padding="9dp"
android:layout_alignParentLeft="true"
/>
<TextView
android:id="@+id/telmgr_tel_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:textSize="17sp"
android:padding="9dp"
/>
</RelativeLayout>
listView分页下载的源码http://download.youkuaiyun.com/detail/baidu_32731497/9453685