博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android142 360 分页加载
阅读量:6590 次
发布时间:2019-06-24

本文共 21095 字,大约阅读时间需要 70 分钟。

dao:

package com.itheima.mobileguard.db.dao;import java.util.ArrayList;import java.util.List;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.SystemClock;import com.itheima.mobileguard.db.BlackNumberDBOpenHelper;import com.itheima.mobileguard.domain.BlackNumberInfo;/** * 黑名单数据库的增删改查工具类 *  * @author Administrator *  */public class BlackNumberDao {    private BlackNumberDBOpenHelper helper;    public BlackNumberDao(Context context) {        helper = new BlackNumberDBOpenHelper(context);    }    /**     * 添加黑名单号码     *      * @param number     *            号码     * @param mode     *            拦截模式     * @return 是否添加成功     */    public boolean add(String number, String mode) {        // 获取到可写的数据库        SQLiteDatabase db = helper.getWritableDatabase();        ContentValues values = new ContentValues();        values.put("number", number);        values.put("mode", mode);        long rowid = db.insert("blackinfo", null, values);        if (rowid == -1) {            return false;        } else {            return true;        }    }    /**     * 删除黑名单号码     *      * @param number     *            号码     * @return 是否删除成功     */    public boolean delete(String number) {        // 获取到可写的数据库        SQLiteDatabase db = helper.getWritableDatabase();        int rownumber = db.delete("blackinfo", "number=?",                new String[] { number });        if (rownumber == 0) {            return false;        } else {            return true;        }    }    /**     * 修改黑名单号码的拦截模式     *      * @param number     *            号码     * @param newmode     *            新的拦截模式     * @return 是否修改成功     */    public boolean changeBlockMode(String number, String newmode) {        // 获取到可写的数据库        SQLiteDatabase db = helper.getWritableDatabase();        ContentValues values = new ContentValues();        values.put("mode", newmode);        int rownumber =db.update("blackinfo", values, "number=?", new String[]{number});        if (rownumber == 0) {            return false;        } else {            return true;        }    }    /**     * 返回一个黑名单号码拦截模式     * @param number 要查询的黑名单号码     * @return 0不是黑名单号码不拦截 1全部拦截 2短信拦截 3电话拦截      */    public String findBlockMode(String number){        String mode = "0";        // 获取到可读的数据库        SQLiteDatabase db = helper.getReadableDatabase();        Cursor cursor = db.query("blackinfo", new String[]{"mode"}, "number=?", new String[]{number}, null, null, null);        if(cursor.moveToNext()){            mode = cursor.getString(0);        }        cursor.close();        db.close();        return mode;    }            /**     * 查询全部的黑名单号码     */    public List
findAll(){ // 得到可读的数据库 SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.query("blackinfo", new String[]{"number","mode"}, null, null, null, null, null); List
blackNumberInfos = new ArrayList
(); while(cursor.moveToNext()){ BlackNumberInfo info = new BlackNumberInfo(); String number = cursor.getString(0); String mode = cursor.getString(1); info.setMode(mode); info.setNumber(number); blackNumberInfos.add(info); } cursor.close(); db.close(); SystemClock.sleep(3000); return blackNumberInfos; } /** * 分页查询数据库的记录 * @param pagenumber 第几页,页码 从第0页开始 * @param pagesize 每一个页面的大小 */ public List
findPart(int pagenumber,int pagesize){ // 得到可读的数据库 SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery("select number,mode from blackinfo limit ? offset ?", new String[]{String.valueOf(pagesize), String.valueOf(pagesize*pagenumber) }); List
blackNumberInfos = new ArrayList
(); while(cursor.moveToNext()){ BlackNumberInfo info = new BlackNumberInfo(); String number = cursor.getString(0); String mode = cursor.getString(1); info.setMode(mode); info.setNumber(number); blackNumberInfos.add(info); } cursor.close(); db.close(); SystemClock.sleep(30); return blackNumberInfos; } /** * 分批加载数据 * @param startIndex 从哪个位置开始加载数据 * @param maxCount 最多加载几条数据 */ public List
findPart2(int startIndex,int maxCount){ // 得到可读的数据库 SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery("select number,mode from blackinfo order by _id desc limit ? offset ?", new String[]{String.valueOf(maxCount), String.valueOf(startIndex) }); List
blackNumberInfos = new ArrayList
(); while(cursor.moveToNext()){ BlackNumberInfo info = new BlackNumberInfo(); String number = cursor.getString(0); String mode = cursor.getString(1); info.setMode(mode); info.setNumber(number); blackNumberInfos.add(info); } cursor.close(); db.close(); SystemClock.sleep(30); return blackNumberInfos; } /** * 获取数据库的总条目个数 * @param pagenumber 第几页,页码 从第0页开始 * @param pagesize 每一个页面的大小 */ public int getTotalNumber(){ // 得到可读的数据库 SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery("select count(*) from blackinfo",null); cursor.moveToNext(); int count = cursor.getInt(0); cursor.close(); db.close(); return count; }}

选择页码跳页加载 activity:

package com.itheima.mobileguard.activities;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.text.TextUtils;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import com.itheima.mobileguard.R;import com.itheima.mobileguard.db.dao.BlackNumberDao;import com.itheima.mobileguard.domain.BlackNumberInfo;public class CallSmsSafeActivity2 extends Activity {    private ListView lv_callsms_safe;    private LinearLayout ll_add_number_tips;    private LinearLayout ll_loading;    /**     * 页面输入框     */    private EditText et_page_number;        /**     * 页码信息     */    private TextView tv_page_info;        /**     * 页面大小     */    private static final int pageSize = 20;    /**     * 当前页码号     */    private int curentPgeNumber = 0;    /**     * 一共有多少页     */    private int totalPage = 0;        private BlackNumberDao dao;    private List
infos; /** * 消息处理器 */ private Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { ll_loading.setVisibility(View.INVISIBLE); if (infos.size() == 0) { // 没有数据,设置添加数据的提醒 ll_add_number_tips.setVisibility(View.VISIBLE); } else { lv_callsms_safe.setAdapter(new CallSmsSafeAdapter()); } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initUI(); fillData(); } /** * 填充数据 */ private void fillData() { dao = new BlackNumberDao(this); //数据库的总条目个数 / 每个页面最多显示多少条数据 totalPage = dao.getTotalNumber()/pageSize; tv_page_info.setText(curentPgeNumber+"/"+totalPage); //耗时的操作 逻辑应该放在子线程里面执行。 ll_loading.setVisibility(View.VISIBLE); new Thread(){ public void run() { infos = dao.findPart(curentPgeNumber, pageSize); handler.sendEmptyMessage(0); }; }.start(); } /** * 初始化ui的逻辑块 */ private void initUI() { setContentView(R.layout.activity_callsms_safe); ll_add_number_tips = (LinearLayout) findViewById(R.id.ll_add_number_tips); ll_loading = (LinearLayout) findViewById(R.id.ll_loading); lv_callsms_safe = (ListView) findViewById(R.id.lv_callsms_safe); et_page_number = (EditText) findViewById(R.id.et_page_number); tv_page_info = (TextView) findViewById(R.id.tv_page_info); } private class CallSmsSafeAdapter extends BaseAdapter { @Override public int getCount() { return infos.size(); } //这个方法要被执行很多次, 有多个条目 就要执行多少次 @Override public View getView(int position, View convertView, ViewGroup parent) { System.out.println("getview:"+position); View view; ViewHolder holder; if (convertView == null) { view = View.inflate(CallSmsSafeActivity2.this, R.layout.item_callsms, null); holder = new ViewHolder(); //减少子孩子查询的次数 holder.tv_phone = (TextView) view .findViewById(R.id.tv_item_phone); holder.tv_mode = (TextView) view.findViewById(R.id.tv_item_mode); //把孩子id的引用 存放在holder里面,设置给父亲 view view.setTag(holder); } else { view = convertView; //使用历史缓存view对象, 减少view对象被创建的次数 holder = (ViewHolder) view.getTag(); } BlackNumberInfo info = infos.get(position); holder.tv_phone.setText(info.getNumber()); // 1 全部拦截 2 短信拦截 3 电话拦截 String mode = info.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对象的容器 * @author Administrator * */ class ViewHolder{ TextView tv_phone; TextView tv_mode; } /** * 上一页 * @param view */ public void prePage(View view){ if(curentPgeNumber<=0){ Toast.makeText(this, "已经是第一页", 0).show(); return; } curentPgeNumber--; fillData(); } /** * 下一页 * @param view */ public void nextPage(View view){ if(curentPgeNumber>(totalPage-1)){ Toast.makeText(this, "已经是最后一页", 0).show(); return; } curentPgeNumber++; fillData(); } /** * 跳转 * @param view */ public void jump(View view){ String str_pagenumber = et_page_number.getText().toString().trim(); if(TextUtils.isEmpty(str_pagenumber)){ Toast.makeText(this, "请输入页面号", 0).show(); }else{ int number = Integer.parseInt(str_pagenumber); if(number>=0&&number

 没有页码滑动分批加载Activity:

package com.itheima.mobileguard.activities;import java.util.List;import android.app.Activity;import android.app.AlertDialog;import android.app.AlertDialog.Builder;import android.os.Bundle;import android.os.Handler;import android.text.TextUtils;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.EditText;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import com.itheima.mobileguard.R;import com.itheima.mobileguard.db.dao.BlackNumberDao;import com.itheima.mobileguard.domain.BlackNumberInfo;public class CallSmsSafeActivity extends Activity {    private ListView lv_callsms_safe;    private LinearLayout ll_add_number_tips;    private LinearLayout ll_loading;    private BlackNumberDao dao;    private List
infos; // 代表就是当前界面的集合。 private CallSmsSafeAdapter adapter; /** * 开始获取数据的位置 */ private int startIndex = 0; /** * 一次最多获取几条数据 */ private int maxCount = 20; private int totalCount = 0; /** * 消息处理器 */ private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { ll_loading.setVisibility(View.INVISIBLE); if (infos.size() == 0) { // 没有数据,设置添加数据的提醒 ll_add_number_tips.setVisibility(View.VISIBLE); } else { if (adapter == null) { adapter = new CallSmsSafeAdapter(); lv_callsms_safe.setAdapter(adapter); } else {
// 数据适配器是已经存在的。 // 因为数据适配器里面的数据 已经变化。刷新界面。 adapter.notifyDataSetChanged(); } } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initUI(); fillData(); } /** * 填充数据 */ private void fillData() { dao = new BlackNumberDao(this); totalCount = dao.getTotalNumber(); // 数据库的总条目个数 / 每个页面最多显示多少条数据 // 耗时的操作 逻辑应该放在子线程里面执行。 ll_loading.setVisibility(View.VISIBLE); new Thread() { public void run() { if (infos == null) { infos = dao.findPart2(startIndex, maxCount); } else { // 集合里面原来有数据,新的数据应该放在旧的集合的后面。 infos.addAll(dao.findPart2(startIndex, maxCount)); } handler.sendEmptyMessage(0); }; }.start(); } /** * 初始化ui的逻辑块 */ private void initUI() { setContentView(R.layout.activity_callsms_safe); ll_add_number_tips = (LinearLayout) findViewById(R.id.ll_add_number_tips); ll_loading = (LinearLayout) findViewById(R.id.ll_loading); lv_callsms_safe = (ListView) findViewById(R.id.lv_callsms_safe); lv_callsms_safe.setOnScrollListener(new OnScrollListener() { // 滚动状态发生变化调用的方法。 // OnScrollListener.SCROLL_STATE_FLING 惯性滑动 // OnScrollListener.SCROLL_STATE_TOUCH_SCROLL 触摸滑动 // OnScrollListener.SCROLL_STATE_IDLE 静止 @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case OnScrollListener.SCROLL_STATE_IDLE: // 静止状态 // 判断是否是最后一个条目。 int lastPosition = lv_callsms_safe.getLastVisiblePosition(); System.out.println("最后一个可见条目的位置:" + lastPosition); if (lastPosition == infos.size() - 1) { // //20条数据 // 加载下20条数据。 更改加载数据的开始位置 startIndex += maxCount; if (startIndex >= totalCount) {
//已经到达最后 Toast.makeText(getApplicationContext(), "没有更多的数据了。", 0).show(); return; } fillData(); } break; } } // 只要listview发生滚动 就会调用下面的方法 @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); } private class CallSmsSafeAdapter extends BaseAdapter { @Override public int getCount() { return infos.size(); } // 这个方法要被执行很多次, 有多个条目 就要执行多少次 @Override public View getView(int position, View convertView, ViewGroup parent) { View view; ViewHolder holder; if (convertView == null) { view = View.inflate(CallSmsSafeActivity.this, R.layout.item_callsms, null); holder = new ViewHolder(); // 减少子孩子查询的次数 holder.tv_phone = (TextView) view .findViewById(R.id.tv_item_phone); holder.tv_mode = (TextView) view .findViewById(R.id.tv_item_mode); holder.iv_delete = (ImageView) view .findViewById(R.id.iv_delete); // 把孩子id的引用 存放在holder里面,设置给父亲 view view.setTag(holder); } else { view = convertView; // 使用历史缓存view对象, 减少view对象被创建的次数 holder = (ViewHolder) view.getTag(); } final BlackNumberInfo info = infos.get(position); holder.iv_delete.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String number = info.getNumber(); // 从数据库删除黑名单号码 boolean result = dao.delete(number); if (result) { Toast.makeText(getApplicationContext(), "删除成功", 0) .show(); // 从界面ui里面删除信息 infos.remove(info); // 通知界面刷新 adapter.notifyDataSetChanged(); } else { Toast.makeText(getApplicationContext(), "删除失败", 0) .show(); } } }); holder.tv_phone.setText(info.getNumber()); // 1 全部拦截 2 短信拦截 3 电话拦截 String mode = info.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对象的容器 * * @author Administrator * */ class ViewHolder { TextView tv_phone; TextView tv_mode; ImageView iv_delete; } /** * 添加黑名单号码 * * @param view */ public void addBlackNumber(View view) { AlertDialog.Builder builder = new Builder(this); View dialogView = View.inflate(this, R.layout.dialog_add_blacknumber, null); final AlertDialog dialog = builder.create(); final EditText et_black_number = (EditText) dialogView .findViewById(R.id.et_black_number); final CheckBox cb_phone = (CheckBox) dialogView .findViewById(R.id.cb_phone); final CheckBox cb_sms = (CheckBox) dialogView.findViewById(R.id.cb_sms); dialogView.findViewById(R.id.bt_cancel).setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); dialogView.findViewById(R.id.bt_ok).setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { String blackNumber = et_black_number.getText() .toString().trim(); if (TextUtils.isEmpty(blackNumber)) { Toast.makeText(getApplicationContext(), "号码不能为空", 1) .show(); return; } String mode = "0"; // 1 全部拦截 2 短信拦截 3 电话拦截 if (cb_phone.isChecked() && cb_sms.isChecked()) { mode = "1"; } else if (cb_phone.isChecked()) { mode = "3"; } else if (cb_sms.isChecked()) { mode = "2"; } else { Toast.makeText(getApplicationContext(), "请选择拦截模式", 1).show(); return; } // 把数据添加到数据库 boolean result = dao.add(blackNumber, mode); // 刷新界面。 把数据加入到infos集合里面。 if (result) { BlackNumberInfo info = new BlackNumberInfo(); info.setMode(mode); info.setNumber(blackNumber); infos.add(0, info);// 界面的数据集合发生了变化。 // 通知界面刷新。 if (adapter != null) { adapter.notifyDataSetChanged(); } else { adapter = new CallSmsSafeAdapter(); lv_callsms_safe.setAdapter(adapter); } } dialog.dismiss(); } }); dialog.setView(dialogView, 0, 0, 0, 0); dialog.show(); }}

 

本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/5140448.html,如需转载请自行联系原作者
你可能感兴趣的文章
Red Hat EnterPrise Linux 5.4下web服务器的综合使用(普通站点、虚拟主机、安全性、...
查看>>
squirrelmail+change_sqlpass 认证 问题
查看>>
hive优化--增加减少map数
查看>>
重建二叉树
查看>>
ERP计划参数如何在线更新
查看>>
3.8Python数据处理篇之Numpy系列(八)---Numpy的梯度函数
查看>>
LVS+Keepalived实现高可用集群
查看>>
我的友情链接
查看>>
hadoop管理命令——fsck
查看>>
我的友情链接
查看>>
unbantu安装 mysql --- 百度云
查看>>
sql2008性能计数器注册表配置单元一致性失败
查看>>
LNMP环境搭建
查看>>
我的友情链接
查看>>
学习linux—— 磁盘相关指令
查看>>
词法分析与语法分析简介
查看>>
JS中的默认行为
查看>>
我的友情链接
查看>>
Checkio代码闯关小计
查看>>
从oracle到mysql,主从到分库,一个普通项目数据库架构的变迁
查看>>