继承的BaseAdapter里面有一些方法不会使用,可以创建一个自定义的MyBaseAdapter来实现那些方法,进行封装,优化代码

前面的都是一样的,多了一个封装的MyBaseAdapter.java同时对CallSafeActivity.java进行修改

主体和上一篇都是一致的,在显示的地方有一些不一样,通过对条目进行封装来优化

         //谷歌推出的优化方案ViewHolder holder;if(convertView == null){convertView = View.inflate(CallSafeActivity.this, R.layout.item_call_safe, null);holder = new ViewHolder();holder.tv_number = (TextView) convertView.findViewById(R.id.tv_number);holder.tv_mode = (TextView) convertView.findViewById(R.id.tv_mode);convertView.setTag(holder);}else{holder = (ViewHolder) convertView.getTag();}holder.tv_number.setText(blackNumberInfos.get(position).getNumber());String mode = blackNumberInfos.get(position).getMode();if(mode.equals("1")){holder.tv_mode.setText("电话和短信拦截");}else if(mode.equals("2")){holder.tv_mode.setText("电话拦截");}else if(mode.equals("3")){holder.tv_mode.setText("短信拦截");}return convertView;

布局文件主布局让黑名单以listView的形式显示activity_call_safe.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextView style="@style/TitleStyle"android:text="黑名单管理"/><include android:id="@+id/list_view_callsafe"layout="@layout/list_view_callsafe"/></LinearLayout>

ListView的布局activity_view_callsafe.xml

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"></ListView>

每一个条目的布局文件item_call_safe.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextView android:id="@+id/tv_number"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:textColor="@color/black"android:textSize="20sp"android:text="13000000000"/><TextView android:id="@+id/tv_mode"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@color/black"android:layout_marginLeft="10dp"android:textSize="20sp"android:layout_below="@id/tv_number"android:text="电话拦截"/><ImageView android:layout_width="40dp"android:layout_height="40dp"android:layout_marginRight="10dp"android:layout_alignParentRight="true"android:background="@drawable/ic_delete_btn"/>
</RelativeLayout>

创建数据库BlackNumberOpenHelper .java

package com.ldw.safe.db.dao;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;/** 黑名单的SQLiteOpenHelper,创建黑名单数据库的表*/
public class BlackNumberOpenHelper extends SQLiteOpenHelper{public BlackNumberOpenHelper(Context context) {super(context, "safe.db", null, 1);}//创建数据库的表//blacknumber表名,_id逐渐自动增长,number电话号码,mode拦截模式,电话拦截,短信拦截@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("create table blacknumber (_id integer primary key autoincrement,number varchar(20),mode varchar(2))");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stub}}

黑名单的javaBean。BlackNumberInfo.java

package com.ldw.safe.bean;/** 黑名单的javaBean*/
public class BlackNumberInfo {//number黑名单的号码,//mode黑名单的拦截模式1表示全部拦截2表示电话拦截3表示全部拦截private String number;private String mode;public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public String getMode() {return mode;}public void setMode(String mode) {this.mode = mode;}}

数据库的逻辑文件BlackNumberDao.java

package com.ldw.safe.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 com.ldw.safe.bean.BlackNumberInfo;/** 黑名单数据库的逻辑文件*/
public class BlackNumberDao {private BlackNumberOpenHelper helper;public BlackNumberDao(Context context){helper = new BlackNumberOpenHelper(context);}//添加黑名单//number黑名单号码,mode拦截模式,"blacknumber"是表名public boolean add(String number, String mode){SQLiteDatabase db = helper.getWritableDatabase();ContentValues contentValues = new ContentValues();contentValues.put("number", number);contentValues.put("mode", mode);long blacknumber = db.insert("blacknumber", null, contentValues);if(blacknumber == -1){//添加失败return false;}else{return true;}}//通过电话号码删除黑命单//number电话号码,"blacknumber"是表名public boolean delete(String number){SQLiteDatabase db = helper.getWritableDatabase();int rowNumber = db.delete("blacknumber", "number=?", new String[]{number});if(rowNumber == 0){//删除失败return false;}else{return true;}}//修改黑名单的模式public boolean changeNumberMode(String number, String mode){SQLiteDatabase db = helper.getWritableDatabase();ContentValues contentValues = new ContentValues();contentValues.put("mode", mode);int rowNumber = db.update("blacknumber", contentValues, "number=?", new String[]{number});if(rowNumber == 0){//修改失败return false;}else{return true;}}//通过电话号码查找黑名单拦截模式public String findNumber(String number){String mode = "";SQLiteDatabase db = helper.getWritableDatabase();Cursor cursor = db.query("blacknumber", 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<BlackNumberInfo> findAll(){SQLiteDatabase db = helper.getWritableDatabase();List<BlackNumberInfo> blackNumberInfos = new ArrayList<BlackNumberInfo>();Cursor cursor = db.query("blacknumber", new String[]{"number", "mode"}, null, null, null, null, null);//查询所有的所有用whilewhile(cursor.moveToNext()){BlackNumberInfo blackNumberInfo = new BlackNumberInfo();blackNumberInfo.setNumber(cursor.getString(0));blackNumberInfo.setMode(cursor.getString(1));blackNumberInfos.add(blackNumberInfo);}cursor.close();db.close();return blackNumberInfos;}
}

activity显示的逻辑文件CallSafeActivity .java

package com.ldw.safe.Activity;import java.util.List;import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;import com.ldw.safe.R;
import com.ldw.safe.adapter.MyBaseAdapter;
import com.ldw.safe.bean.BlackNumberInfo;
import com.ldw.safe.db.dao.BlackNumberDao;public class CallSafeActivity extends Activity {private ListView list_view_callsafe;private List<BlackNumberInfo> blackNumberInfos;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_call_safe);initUi();initData();}private void initData() {BlackNumberDao dao = new BlackNumberDao(this);//获取到表的所有数据blackNumberInfos = dao.findAll();//初始化适配器CallSafeAdapter adapter = new CallSafeAdapter(blackNumberInfos, CallSafeActivity.this);//配置适配器list_view_callsafe.setAdapter(adapter);}private void initUi() {list_view_callsafe = (ListView) findViewById(R.id.list_view_callsafe);}//对代码进行优化,继承自定义MyBaseAdapter,MyBaseAdapter继承自BaseAdapter封装一些常用的方法private class CallSafeAdapter extends MyBaseAdapter<BlackNumberInfo>{private CallSafeAdapter(List lists, Context mContext){super(lists, mContext);}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {//谷歌推出的优化方案ViewHolder holder;if(convertView == null){convertView = View.inflate(CallSafeActivity.this, R.layout.item_call_safe, null);holder = new ViewHolder();holder.tv_number = (TextView) convertView.findViewById(R.id.tv_number);holder.tv_mode = (TextView) convertView.findViewById(R.id.tv_mode);convertView.setTag(holder);}else{holder = (ViewHolder) convertView.getTag();}holder.tv_number.setText(lists.get(position).getNumber());String mode = lists.get(position).getMode();if(mode.equals("1")){holder.tv_mode.setText("电话和短信拦截");}else if(mode.equals("2")){holder.tv_mode.setText("电话拦截");}else if(mode.equals("3")){holder.tv_mode.setText("短信拦截");}return convertView;/*//谷歌推出的优化方案ViewHolder holder;if(convertView == null){convertView = View.inflate(CallSafeActivity.this, R.layout.item_call_safe, null);holder = new ViewHolder();holder.tv_number = (TextView) convertView.findViewById(R.id.tv_number);holder.tv_mode = (TextView) convertView.findViewById(R.id.tv_mode);convertView.setTag(holder);}else{holder = (ViewHolder) convertView.getTag();}holder.tv_number.setText(blackNumberInfos.get(position).getNumber());String mode = blackNumberInfos.get(position).getMode();if(mode.equals("1")){holder.tv_mode.setText("电话和短信拦截");}else if(mode.equals("2")){holder.tv_mode.setText("电话拦截");}else if(mode.equals("3")){holder.tv_mode.setText("短信拦截");}return convertView;*//*初步的优化convertView = View.inflate(CallSafeActivity.this, R.layout.item_call_safe, null);TextView tv_number = (TextView) convertView.findViewById(R.id.tv_number);TextView tv_mode = (TextView) convertView.findViewById(R.id.tv_mode);tv_number.setText(blackNumberInfos.get(position).getNumber());String mode = blackNumberInfos.get(position).getMode();if(mode.equals("1")){tv_mode.setText("电话和短信拦截");}else if(mode.equals("2")){tv_mode.setText("电话拦截");}else if(mode.equals("3")){tv_mode.setText("短信拦截");}return convertView;*//*传统的方式View view = View.inflate(CallSafeActivity.this, R.layout.item_call_safe, null);TextView tv_number = (TextView) view.findViewById(R.id.tv_number);TextView tv_mode = (TextView) view.findViewById(R.id.tv_mode);tv_number.setText(blackNumberInfos.get(position).getNumber());String mode = blackNumberInfos.get(position).getMode();if(mode.equals("1")){tv_mode.setText("电话和短信拦截");}else if(mode.equals("2")){tv_mode.setText("电话拦截");}else if(mode.equals("3")){tv_mode.setText("短信拦截");}return view;*/}     }static class ViewHolder{TextView tv_number;TextView tv_mode;}}

封装MyBaseAdapter.java继承自BaseAdapter.java,实现一些不重要的方法
package com.ldw.safe.adapter;import java.util.List;import android.content.Context;
import android.widget.BaseAdapter;/**自定义适配器*/
public abstract class MyBaseAdapter<T> extends BaseAdapter{//不知道传入什么数据直接使用T来统一替代public List<T> lists;public Context mContext;protected MyBaseAdapter(List<T> lists, Context mContext){this.lists = lists;this.mContext = mContext;}protected MyBaseAdapter(){}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn lists.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn lists.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}}

116.s1-黑名单设置的优化(封装BaseAdapter的方法)相关推荐

  1. (2014年2月7日升级)Ubuntu-14.04-Alpha2-32位简体中文优化封装版

    2019独角兽企业重金招聘Python工程师标准>>> (2014年2月7日升级)Ubuntu-14.04-Alpha2-32位简体中文优化封装版 感谢大家对LINUX封装技术的支持 ...

  2. Java中性能优化的35种方法汇总

    原文地址:http://www.jb51.net/article/102831.htm 前言 对程序员们来说,代码优化是一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于 ...

  3. 利用js的闭包原理做对象封装及调用方法

    创建一个js文件,名为testClosure.js: ? 1 2 3 4 5 6 7 8 9 (function () {   function a()   {     alert('i am a') ...

  4. 封装 电流密度 重布线_半导体封装及其制造方法与流程

    本发明实施例涉及一种半导体封装及其制造方法. 背景技术: 业界已知使用连接在横向上间隔开的结合垫与焊料凸块的重布线层来制作微电子导体装置,例如半导体装置.此种装置是晶片级芯片规模封装(waferlev ...

  5. DB2设计与性能优化:原理、方法与实践

    DB2设计与性能优化:原理.方法与实践 王飞鹏  陈辉  张广舟  成孜论  编著 ISBN 978-7-121-13094-6 2011年4月出版 定价:89.80元(含光盘1张) 16开 416 ...

  6. html优化网站的方法,利用HTML优化加快网页速度方法介绍

    减少web页面下载时间的关键就是设法减小文件大小.当多个页面共用一些成分内容时,就可以考虑将这些公用部分单独分离出来.比如:我们可以将多个HTML页面都用到的脚本程序编写成独立存在的.js文件,然后再 ...

  7. 【EventBus】事件通信框架 ( 实现几个关键的封装类 | 消息中心 | 订阅注解 | 订阅方法封装 | 订阅对象-方法封装 | 线程模式 )

    文章目录 一.消息中心 二.订阅方法时的注解 三.订阅方法封装 四.订阅对象-方法封装 五.线程模式 一.消息中心 此处暂时只实现一个单例类 , 后续 注册订阅者 , 处理事件传递 , 取消注册订阅者 ...

  8. vue如何封装请求接口方法

    vue如何封装请求接口方法 方法一 首先创建一个server.js文件 引入axios和qs //引入axios和qs插件 import axios from 'axios' import qs fr ...

  9. iservice封装有哪些方法_请问这段Java代码能不能封装成一个方法

    问题描述 这段代码在我的项目中经常会被使用到,想要把它封装成一个方法以达到减少代码量的目的,但由于本人是个菜鸟没能做到,希望有心的大神提供下思路.在此先行拜谢了. 目的:想将hardwareServi ...

最新文章

  1. 10.17 配置IP,网络问题排查
  2. 画个火山图,标记下基因的名字
  3. 数字图像处理 频率域平滑 MATLAB实验
  4. 菜鸟学习笔记:Java提升篇12(Java动态性2——动态编译、javassist字节码操作)
  5. Springboot+Mysql健身房在线预约管理系统
  6. 25-限制容器对内存的使用
  7. python处理pdf文档_pyPdf - 用Python方便的处理PDF文档
  8. 安理大计算机专业全国排名,安徽大学排名:安徽有哪些大学2017排名
  9. Android使用okhttp加载图片
  10. 【分享】PDF批量转JPG方法
  11. kali linux 源码免杀,shellcode超级免杀
  12. php 三消算法,三消游戏关卡设计教程(初级篇)——基本地形设计
  13. 刘卫国python语言程序设计实验题答案_Python语言程序设计-中国大学mooc-试题题目及答案...
  14. [转]SREng扫描报告分析
  15. 乐高收割机器人_乐高机器人这个大坑,为啥大家都拽着孩子往里跳?
  16. 游戏的本质【转自网易】
  17. vue项目中获取今天,昨天,明天时间方法
  18. CVE-2022-27778漏洞修复
  19. matlab信号频域放大的含义,频域特征是什么意思 信号频域特征参数,如重心
  20. 从零开始SVN(2)--Eclipse、Subclipse、分支开发

热门文章

  1. css图片精灵定位_DIV CSS Sprites精灵 CSS图像拼合 CSS背景贴图定位教程案例
  2. 为什么计算机连接不上u盘,为什么usb连接电脑读不出u盘
  3. 想玩明白Hive哪有那么容易,十分钟你都看不完
  4. 记录一次我是如何爬了某学校近2w学生信息的!
  5. 初始c语言1,你理解了多少?
  6. 按照阳历我今天生日了哦!
  7. 云客Drupal源码分析之配置系统Configuration(一)
  8. intellij idea如何快速查看当前类中的所有方法?
  9. 高值选择器和低值选择器原理及应用
  10. 使用Hystrix实现单个方法