5.1 分批加载listView中条目
来源:互联网 发布:java设计模式面试 编辑:程序博客网 时间:2024/05/19 14:02
1.在数据库访问dao层中,创建查询部分黑名单的方法
2.给listview设置setOnScrollListener监听事件
3. 完成监听事件内部实现 类中未实现的方法
1.在数据库访问dao层中,创建查询部分黑名单的方法
/**
* 查询部分黑名单号码
* @param currentNumber 从哪条记录开始
* @param maxNumber 最多获取多少条数据
* @return
*/
public List<BlackNumberBean> getPraNumberInfo( int currentNumber,int maxNumber){
try {
Thread. sleep(600);
} catch (InterruptedException e) {
e.printStackTrace();
}
List<BlackNumberBean> numberList= new ArrayList<BlackNumberBean>();
SQLiteDatabase db = helper.getWritableDatabase();
//Cursor cursor = db.rawQuery("select * from blacknumber limit ?,? ",new String[]{String.valueOf(currentNumber),String.valueOf(maxNumber)});
Cursor cursor = db.rawQuery( "select * from blacknumber limit ? offset ?", new String[] {
String. valueOf(maxNumber), String.valueOf(currentNumber) });
while(cursor.moveToNext()){
BlackNumberBean numberBean= new BlackNumberBean();
numberBean.setId(cursor.getInt(cursor.getColumnIndex( "id")));
numberBean.setNumber(cursor.getString(cursor.getColumnIndex( "number")));
numberBean.setMode(cursor.getString(cursor.getColumnIndex( "mode")));
numberList.add(numberBean);
}
db.close();
return numberList;
}
/**
* 查询所有黑名单个数
* @return
*/
public int getMaxNumber(){
int total=0;
SQLiteDatabase db = helper.getWritableDatabase();
Cursor cursor = db.rawQuery( "select * from blacknumber", null);
total=cursor.getCount(); //得到数据库有多少条记录
db.close();
return total;
}
-----------------------------------------------------------------------------------------------
2.给listview设置setOnScrollListener监听事件
3. 完成监听事件内部实现 类中未实现的方法
public class CallSmsSafeActivity extends Activity {
private String TAG= "CallSmsSafeActivity";
private ListView lv_callsms_safe ;
private BlackNumberDao dao;
private BlackNumberBean blackNumberBean;
private List<BlackNumberBean> numberList ;
private TextView tv_number;
private TextView tv_mode;
private ImageView iv_delete;
private MyAdapter adpter;
private LinearLayout loading;
private int currentNumber=0; //分页参数
private int maxNumber=20;
private int totalCount;
private boolean loadingflag;
/**
* 创建消息处理机制
*/
private Handler handler= new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Log. i(TAG , "主线程跟新界面" );
loading.setVisibility(View. GONE); //加载到布局时移除
if( adpter== null){
adpter= new MyAdapter();
lv_callsms_safe.setAdapter( adpter);
} else{
//复用旧的数据适配器,通知数据适配器数据跟新了
adpter.notifyDataSetChanged();
loadingflag= false; //标记已加载完
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout. activity_callsms_safe);
lv_callsms_safe=( ListView) findViewById(R.id.lv_callsms_safe );
loading=(LinearLayout) findViewById(R.id. loading);
loading.setVisibility(View. VISIBLE); //加载布局可见
dao= new BlackNumberDao( this); //首次加载数据
fillDate();
totalCount= dao.getMaxNumber();
Log. i(TAG , "数据库总条目数:" +totalCount );
//给lv 注册滚动监听事件
lv_callsms_safe.setOnScrollListener( new OnScrollListener() {
// 滚动状态发生改变的时候 调用的方法
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case OnScrollListener. SCROLL_STATE_IDLE: // listview静止状态
// 获取最后一个可见条目对应的集合里面数据的位置. 从0开始
int lastPosition = lv_callsms_safe.getLastVisiblePosition();
// 获取集合的大小 从1开始
int total = numberList.size();
if (lastPosition == (total - 1)) {
Log. i(TAG , "拖动到了最后一个条目,加载更多的数据..." );
if ( loadingflag) {
Toast. makeText(getApplicationContext(), "正在加载数据.",0).show();
}
currentNumber += maxNumber;
if ( currentNumber >= totalCount ) {
Toast. makeText(getApplicationContext(), "没有更多的数据了",0).show();
return;
}
fillDate();
}
break;
cas e OnScrollListener.SCROLL_STATE_TOUCH_SCROLL : //手指触摸滚动
break;
case OnScrollListener. SCROLL_STATE_FLING: //手指已经离开 惯性滑翔状态
break;
}
}
//滚动的时候调用的方法
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
}
});
}
/**
* 查询数据
*/
private void fillDate() {
loadingflag= true; //标记正在加载数据
new Thread(){
public void run() {
//numberList=dao.getPraNumberInfo(currentPage, pageSize);
if ( numberList == null) {
numberList = dao.getPraNumberInfo( currentNumber, maxNumber);
} else {
numberList.addAll( dao.getPraNumberInfo( currentNumber, maxNumber));
}
handler.sendEmptyMessage(0);
};
}.start();
}
/**
* 创建适配器
*/
public class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return numberList.size();
}
@Override
public View getView( int position, View convertView, ViewGroup parent) {
//复用历史缓存view对象,减少内存消耗,防止内存溢出
View view= null;
ViewHolder holder= null;
if(convertView!= null&&convertView instanceof RelativeLayout){ //RelativeLayout:填充view的布局类型
view=convertView;
Log. i(TAG , "复用历史缓存view:" +position);
holder=(ViewHolder) view.getTag(); //复用孩子的id
} else{
view = View. inflate(getApplicationContext(), R.layout.list_callsms_item,null );
Log. i(TAG , "创建新的view对象:" +position);
holder= new ViewHolder(); //初始化view持有者
//只是在创建view的时候去寻找控件,然后把控件的id存起来
holder. tv_number=(TextView) view.findViewById(R.id.tv_number );
holder. tv_mode=(TextView) view.findViewById(R.id.tv_mode );
holder. iv_delete=(ImageView) view.findViewById(R.id.iv_delete );
view.setTag(holder); //将holder存到view中
}
//非常消耗内存
//View view = View.inflate(getApplicationContext(), R.layout.list_callsms_item,null);
blackNumberBean = numberList.get(position);
holder. tv_number.setText( "号码:"+blackNumberBean .getNumber());
String mode= blackNumberBean.getMode();
if( "1".equals(mode)){
holder. tv_mode.setText( "电话拦截");
} else if( "2".equals(mode)){
holder. tv_mode.setText( "短信拦截");
} else if( "3".equals(mode)){
holder. tv_mode.setText( "全部拦截");
}
return view;
}
@Override
public Object getItem( int position) {
return null;
}
@Override
public long getItemId( int position) {
return 0;
}
}
/**
* 创建view持有者,将需要找的控件的应用放在 viewholder中
*/
static class ViewHolder{
TextView tv_number;
TextView tv_mode;
ImageView iv_delete;
}
}
- 5.1 分批加载listView中条目
- android中listview分批加载数据
- 32-listview分批加载
- android listView 分批加载
- ListView的分批加载
- ListView分批加载数据
- ListView分批加载数据
- android中OnScrollListener的详解(Listview分批加载用到)
- Android中OnScrollListener的详解(Listview分批加载用到)
- Android中OnScrollListener的详解(Listview分批加载用到)
- Android中OnScrollListener的详解(Listview分批加载用到)
- Android中OnScrollListener的详解(Listview分批加载用到)
- Android中OnScrollListener的详解(Listview分批加载用到
- ListView中数据的分批及分页加载
- ListView的分批加载数据
- 安卓中listview分批加载数据
- Android ListView 实现分批加载
- ListView多条目加载
- boost::async_read_some连续接收数据
- rtmp 时间戳问题
- Spring @transactional not working
- Struts2——(6)表单校验
- Codeforces —— 358A Dima and Continuous Line
- 5.1 分批加载listView中条目
- Java中关于==和equal的区别以及equals()方法重写
- 在Flash Builder 4.x 中书写符合ASDOC规范的说明注释
- Linux网络编程(二)
- 对多个Linerlayout设置点击事件,并实现Activity的跳转。(用Switch简化多次设置点击事件的重复代码)
- Spring MVC Framework Tutorial
- NSBundle pathForResource取不到值如何解决?
- VC中使用Picture Control控件作为指示灯
- 5.2 分页显示