listview的优化及分页算法
2017-12-20 21:14
225 查看
listView优化
1:复用convertView
2:复用ViewHolder让其减少findViewById()次数
3:static ViewHolder
4:分页算法
class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return mBlackNumberList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mBlackNumberList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = View.inflate(getApplicationContext(),
R.layout.listview_blacknumber_item, null);
holder.tv_blacknumber = (TextView) convertView
.findViewById(R.id.tv_blacknumber);
holder.tv_blackmode = (TextView) convertView
.findViewById(R.id.tv_blackmode);
holder.iv_black_delete = (ImageView) convertView
.findViewById(R.id.iv_black_delete);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tv_blacknumber.setText(mBlackNumberList.get(position)
.getPhone());
switch (Integer.parseInt(mBlackNumberList.get(position).getMode())) {
case 1:
holder.tv_blackmode.setText("屏蔽短信");
break;
case 2:
holder.tv_blackmode.setText("屏蔽电话");
break;
case 3:
holder.tv_blackmode.setText("屏蔽所有");
break;
}
return convertView;
}
}
static class ViewHolder {
TextView tv_blacknumber;
TextView tv_blackmode;
ImageView iv_black_delete;
}
分页算法
在BlackNumberDao中创建find(String index)方法,设置每页显示10条,关键是Sql语句。
//查一部分
public List<BlackNumberInfo> find(int index) {
SQLiteDatabase db = blackNumberOpenHelper.getWritableDatabase();
Cursor cursor = db.rawQuery("select phone,mode from blacknumber order by _id desc limit ?,10;", new String[]{index + ""});
List<BlackNumberInfo> list = new ArrayList<BlackNumberInfo>();
while(cursor.moveToNext()) {
BlackNumberInfo blackNumberInfo = new BlackNumberInfo();
blackNumberInfo.setPhone(cursor.getString(0));
blackNumberInfo.setMode(cursor.getString(1));
list.add(blackNumberInfo);
}
cursor.close();
db.close();
return list;
}得到集合后,分析加载多页的逻辑,
加载更多的触发条件
1.监听状态改变
2.滚动到最底部,最后一个listView的条目可见
3.滚动状态发生改变 滚动------>停止(空闲)
加载下一页数据完成后,需要添加到上一页数据的最后面
lv_blacknumber = (ListView) findViewById(R.id.lv_blacknumber);
lv_blacknumber.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
if (mDao.getCount() > mBlackNumberList.size()) {
if (scrollState == SCROLL_STATE_IDLE
&& lv_blacknumber.getLastVisiblePosition() >= mBlackNumberList
.size() - 1 && !mIsLoad) {
new Thread() {
public void run() {
List<BlackNumberInfo> moreList = mDao
.find(mBlackNumberList.size());
mBlackNumberList.addAll(moreList);
mHandler.sendEmptyMessage(0);
};
}.start();
mIsLoad = !mIsLoad;
}
}
}
1:复用convertView
2:复用ViewHolder让其减少findViewById()次数
3:static ViewHolder
4:分页算法
class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return mBlackNumberList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mBlackNumberList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = View.inflate(getApplicationContext(),
R.layout.listview_blacknumber_item, null);
holder.tv_blacknumber = (TextView) convertView
.findViewById(R.id.tv_blacknumber);
holder.tv_blackmode = (TextView) convertView
.findViewById(R.id.tv_blackmode);
holder.iv_black_delete = (ImageView) convertView
.findViewById(R.id.iv_black_delete);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tv_blacknumber.setText(mBlackNumberList.get(position)
.getPhone());
switch (Integer.parseInt(mBlackNumberList.get(position).getMode())) {
case 1:
holder.tv_blackmode.setText("屏蔽短信");
break;
case 2:
holder.tv_blackmode.setText("屏蔽电话");
break;
case 3:
holder.tv_blackmode.setText("屏蔽所有");
break;
}
return convertView;
}
}
static class ViewHolder {
TextView tv_blacknumber;
TextView tv_blackmode;
ImageView iv_black_delete;
}
分页算法
在BlackNumberDao中创建find(String index)方法,设置每页显示10条,关键是Sql语句。
//查一部分
public List<BlackNumberInfo> find(int index) {
SQLiteDatabase db = blackNumberOpenHelper.getWritableDatabase();
Cursor cursor = db.rawQuery("select phone,mode from blacknumber order by _id desc limit ?,10;", new String[]{index + ""});
List<BlackNumberInfo> list = new ArrayList<BlackNumberInfo>();
while(cursor.moveToNext()) {
BlackNumberInfo blackNumberInfo = new BlackNumberInfo();
blackNumberInfo.setPhone(cursor.getString(0));
blackNumberInfo.setMode(cursor.getString(1));
list.add(blackNumberInfo);
}
cursor.close();
db.close();
return list;
}得到集合后,分析加载多页的逻辑,
加载更多的触发条件
1.监听状态改变
2.滚动到最底部,最后一个listView的条目可见
3.滚动状态发生改变 滚动------>停止(空闲)
加载下一页数据完成后,需要添加到上一页数据的最后面
lv_blacknumber = (ListView) findViewById(R.id.lv_blacknumber);
lv_blacknumber.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
if (mDao.getCount() > mBlackNumberList.size()) {
if (scrollState == SCROLL_STATE_IDLE
&& lv_blacknumber.getLastVisiblePosition() >= mBlackNumberList
.size() - 1 && !mIsLoad) {
new Thread() {
public void run() {
List<BlackNumberInfo> moreList = mDao
.find(mBlackNumberList.size());
mBlackNumberList.addAll(moreList);
mHandler.sendEmptyMessage(0);
};
}.start();
mIsLoad = !mIsLoad;
}
}
}
private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { if (myAdapter == null) { myAdapter = new MyAdapter(); lv_blacknumber.setAdapter(myAdapter); } else { myAdapter.notifyDataSetChanged(); } }; };
相关文章推荐
- 海量数据库的查询优化及分页算法方案
- 海量数据库的查询优化及分页算法方案
- SQL优化-索引、查询优化及分页算法方案
- MS SQL SERVER海量数据库的查询优化及分页算法
- (转载)海量数据库的查询优化及分页算法方案
- 海量数据库的查询优化及分页算法方案
- 海量数据库的查询优化及分页算法方案
- 海量数据库的查询优化及分页算法方案(转载)
- 海量数据库的查询优化及分页算法方案[zt]
- [转]海量数据库的查询优化及分页算法方案
- 【转】SQLSERVER海量数据库的查询优化及分页算法-数据库专栏,SQL Server
- 海量数据库的 查询优化及分页算法方案
- 海量数据库的查询优化及分页算法方案
- 海量数据库的查询优化及分页算法方案
- ListView优化、图片缓存、分页加载(二)
- 转贴:海量数据库的查询优化及分页算法方案
- 海量数据库的查询优化及分页算法方案
- 海量数据库的查询优化及分页算法方案
- 海量数据库的查询优化及分页算法方案
- 海量数据库的查询优化及分页算法方案