ListView分页加载数据

第一步,ListView底部加载数据时的布局文件


   
   

   
   
    
    
    
    
    
    
    
    


   
   
第二步,Main_layout就只有一个ListView,就不贴出代码了

第三步,MyService类

public class MyService {
	public static List
   
   
    
     getData(int start){
		List
    
    
     
      list = new ArrayList
     
     
      
      ();
		for(int i=0; i<20; i++){
			list.add("加载的数据是:" + (start + i));
		}
		return list;
	}
}

     
     
    
    
   
   

第四步,MainActivity代码

public class MainActivity extends Activity {
	private ListView listView;
	private List
   
   
    
     list,data;
	private View view;
	private boolean flag = true;
	public static final int SUCCESS = 1;
	private MyAdapter adapter;
	private int num = 1;
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		list = MyService.getData(0);
		listView = (ListView) findViewById(R.id.listView);
		
		view = View.inflate(this, R.layout.foot_layout, null);
		listView.addFooterView(view); //必须在设置适配器之前
		
		adapter = new MyAdapter();
		listView.setAdapter(adapter);
		listView.removeFooterView(view);//如果不删除的话,这个view就一直存在,达不到我们想要的效果
		listView.setOnScrollListener(new ListViewListener());
	}
	
	Handler handler = new Handler(){
		public void handleMessage(Message msg) {
			if(msg.arg1 == SUCCESS){
				list.addAll(data);
				num++;
				adapter.notifyDataSetChanged();  //让适配器通知ListView更新数据
				flag = true;
				listView.removeFooterView(view);
			}
		}
	};
	
	private class ListViewListener implements OnScrollListener{

		public void onScroll(AbsListView view1, int firstVisibleItem,
				int visibleItemCount, int totalItemCount) {
			 
			if((totalItemCount == (firstVisibleItem + visibleItemCount)) && flag && (num < 5)){
				//当前页的末端
				flag = false;
				listView.addFooterView(view);
				new Thread(){
					public void run() {
						SystemClock.sleep(3000); //模拟从服务器端读取数据的时间
						data = MyService.getData(new Random().nextInt(50));
						//通知主线程更新UI
						Message msg = Message.obtain();
						msg.arg1 = SUCCESS;
						handler.sendMessage(msg);
					}
				}.start();
			}
		}

		public void onScrollStateChanged(AbsListView view, int scrollState) {
			
		}
		
	}
	
	private class MyAdapter extends BaseAdapter{

		public int getCount() {
			return 20*num;
		}

		public Object getItem(int arg0) {
			return null;
		}

		public long getItemId(int arg0) {
			return arg0;
		}

		public View getView(int position, View convertView, ViewGroup parent) {
			TextView tv = new TextView(MainActivity.this);
			tv.setPadding(50, 25, 0, 25);
			tv.setText(list.get(position));
			return tv;
		}
	}
}

   
   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值