android分页加载 ()

来源:互联网 发布:mysql 数据表日志 编辑:程序博客网 时间:2024/05/22 13:19

两个集合

第一个集合:

用来存放所有已经加载的条目内容

第二个集合:

存放每次要加载的内容

然后再将这些内容加入到第一个集合

并通知adapter内容更新了


设置滚动条监听滚动条的状态,当我们滑动屏幕时,滚动条会跟着滚,当滚动条停止滚动时,我们去判断屏幕上的最后一个条目是不是已经和第一个集合的最后一个条目是同一个条目了,如果是的话,我们就要去加载行的条目了。

lv_call_sms_safe.setOnScrollListener(new OnScrollListener() {
// 当listview 的滚动状态发生改变的时候 .
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case OnScrollListener.SCROLL_STATE_IDLE:
//如果拖动到了界面的最下面, 049
int posotion = lv_call_sms_safe.getLastVisiblePosition();
int size = numbers.size();
if((posotion+1)==size){
Logger.i(TAG,"拖动到了界面的最下面.加载更多的数据.");
if(loading){
Toast.makeText(getApplicationContext(), "正在加载数据请稍后再试.", 0).show();
return;
}
fillmoreData();
}

break;
}


}


package cn.itcast.mobilesafe;



import java.util.List;


import android.app.Activity;
import android.os.Bundle;
import cn.itcast.mobilesafe.utils.Logger;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import cn.itcast.mobilesafe.db.dao.BlackNumberDao;
import cn.itcast.mobilesafe.domain.BlackNumber;


public class CallSmsSafeActivity3 extends Activity {
public static final String TAG = "CallSmsSafeActivity";
private ListView lv_call_sms_safe;
private BlackNumberDao dao;
private List<BlackNumber> numbers;
private int page = 1;//当前页码.
private static final int itemcount = 50;//每一页显示的数据.
private CallSmsAdapter adapter;


private boolean loading;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.call_sms_safe);
lv_call_sms_safe = (ListView) findViewById(R.id.lv_call_sms_safe);
// 需要知道 什么时候 用户把界面拖动到了最下面.
// 给listview注册一个滚动的监听事件
lv_call_sms_safe.setOnScrollListener(new OnScrollListener() {
// 当listview 的滚动状态发生改变的时候 .
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case OnScrollListener.SCROLL_STATE_IDLE:
//如果拖动到了界面的最下面, 049
int posotion = lv_call_sms_safe.getLastVisiblePosition();
int size = numbers.size();
if((posotion+1)==size){
Logger.i(TAG,"拖动到了界面的最下面.加载更多的数据.");
if(loading){
Toast.makeText(getApplicationContext(), "正在加载数据请稍后再试.", 0).show();
return;
}
fillmoreData();
}

break;
}


}


// 当listview滚动的时候 的回调方法.
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub


}
});


dao = new BlackNumberDao(this);
numbers = dao.getBlackNumbersByPage(page, itemcount);
adapter = new CallSmsAdapter();
lv_call_sms_safe.setAdapter(adapter);
}


private void fillmoreData() {
loading = true;//表示正在加载数据
page++;
List<BlackNumber>  newBlacknumbers = dao.getBlackNumbersByPage(page, itemcount);
for(BlackNumber blacknumber: newBlacknumbers){
numbers.add(blacknumber);
}
//更新数据适配器里面的内容
//通知listview的界面更新内容.
adapter.notifyDataSetChanged();
loading = false;//加载数据完毕.
}


private class CallSmsAdapter extends BaseAdapter {


public int getCount() {
return numbers.size();
}


public Object getItem(int position) {
return numbers.get(position);
}


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


/**
* converview 历史一个被销毁的view对象的缓存. 上一个被移除屏幕的view对象
*/
public View getView(int position, View convertView, ViewGroup parent) {
// Logger.i(TAG,"getview:"+position);
View view;
ViewHolder holder;
if (convertView != null && convertView instanceof LinearLayout) {
view = convertView;
holder = (ViewHolder) view.getTag();
Logger.i(TAG, "getview:" + position + "历史缓存view对象");
} else {
// 1.把xml文件转换成 view对象.
view = View.inflate(getApplicationContext(),
R.layout.black_number_item, null);
holder = new ViewHolder();
holder.tv_mode = (TextView) view
.findViewById(R.id.tv_blacknumber_mode);
holder.tv_number = (TextView) view
.findViewById(R.id.tv_blacknumber);


// 因为holder里面存放的是 view对象里面控件的引用.
// 在这个view对象里面 存放一个holder对象, holder里面存放的是 控件的引用.
view.setTag(holder);
Logger.i(TAG, "getview:" + position + "创建新的view对象");
}
BlackNumber blacknumber = numbers.get(position);
holder.tv_number.setText(blacknumber.getNumber());
String mode = blacknumber.getMode();
String text;
if ("1".equals(mode)) {
text = "电话拦截";
} else if ("2".equals(mode)) {
text = "短信拦截";
} else {
text = "全部拦截";
}
holder.tv_mode.setText(text);
return view;
}
}


static class ViewHolder {
TextView tv_number;
TextView tv_mode;
}
}
原创粉丝点击