当前位置:首页 > 未命名 > 正文内容

项目规划

u3blog10年前 (2015-02-04)未命名262

阶段一:分析需求,提出显示需求,隐式需求

阶段二:

搭建程序主题框架,界面拆分为三部分,头部,中部,尾部

ID规则:前缀为类型缩写

主体部分:

1.布局为相对布局

 

TOP部分:

1.使用ACTIONBAR,图标 ,名称,常用功能,浮动菜单

2.使用布局文件,相对布局,文本框控件显示名称(定义的string文件资源),在布局的左侧,设置一个整体的背景,给文本控件制定一个字体颜色(color文件),设置文本控件在垂直中心,并与左边peddingleft=“10dp”

4.制定头部布局文件的高度,37dp为推荐

3.在主体布局中包含刚刚定义的头部布局文件

 

Bottom部分:

1.相对布局,高度68dp

2.相对布局,高度68dp(嵌套),设置背景,放入图片控件,指定资源,放置文本控件,设定文本资源,放入图片控件,设定资源,设定三个控件在布局内部的位置,左中右,分别设置每个控件都为垂直居中,设置边距,4dp,文字颜色为白色。

3.在主布局中包含底部布局

(include标签的ID会覆盖内部的ID)

 

中央布局:

为线性布局,宽高填充父布局,设置位置属性,在头下,尾上

 

阶段三:

1.建立ActivityBase类,封装openactivity,showmsg,showalertdialog,分别用于打开,显示信息,显示警告

内部变量名之前加下划线_,参数之前加p.

2.用ActivityFrame方法封装ActivityBase,来定义窗口风格(有无标题栏等),加载布局,封装APPENDMAINBODY方法,获取到中央布局,用INFLATE方法获取VIEW,获取一个布局参数对象,设置为双向填父布局,将此VIEW压入中央布局(addview方法)

 

3.创建相对布局,内嵌GRIDVIEW,双向适应内容,通过numcOLUM制定为三列,layout_centerinparent,控件之间间距50DP(verticalspacing)

 

4.建立图标-名字布局,线性(一个图片,一个TEXTVIEW),自提颜色为黑色,垂直分布

 

5.建立Adapter封装类,建立holder子类,内设Imageview 和TextView的变量。在adapter类中定义两个数组,图片资源ID数组,文字资源数组(context.getstring(id)) 来自构造函数的参数

在GETITEM中返回字符串资源,在GETVIEW中,用INFLATER压入4步骤布局,获取资源实例,赋予新建HOLDER实例的属性4中的两个属性,给新的VIEW设置TAG(settag)把Holder对象放入,下次可以直接获取,不用重复获取VIEW和初始化HOLDER(提高效率)。

完成后,给HOLDER的两个属性添加SETIMAGERESOURCE和SETTEXT,加入具体的值。

 

6.在主Activity中继承ActivityFrame,设置gridview变量,使用appendview方法通过ID动态压入布局(步骤3所定义的) ,定义变量初始化函数,View初始化函数,listener初始化函数,数据绑定函数   

 

7.在Adapter的HOST中,先定义LAYOUT参数,高,宽,50,50,将其设置到HOST的IMAGEVIEW中,设置缩放(scaletype,XY)

 

新建SELECTER,通过设置android:state_selected,android:state_focused,pressed  来判断选择,点击等的主题(item)

在GRIDVIEW中设置上LISTSELECTOR为该次定义的

设置内部图片-文字布局中文字控件上下margin均为5dp

---------------------------------------------------------------------------------

阶段四:封装滑动菜单

封装在ActivityFrame中,在底部布局加入一个线性布局,内部增加一个LISTVIEW

定义全局的STYLE文件,加入DIVIDER和CACHECOLORHINT元素,双fill_parent

将此样式赋予LISTVIEW

新建控件包

封装菜单项对象类,SliderMenuItem,封装ID和TITLE,获得GET SET方法

封装SliderMenuView对象,封装Toggle,add,bindlist,onslidemenuclick,open,close,初始化变量,初始化VIEW,初始化监听器方法,创建构造方法,获取Activity实例,设置状态参数,数据源LIST,底部布局实例变量,初始化变量,初始化布局实例变量。

建立内部类,实现ONCLICK接口,给布局附上监听器

打开方法,建立布局参数,双向FILL_PARENT,为布局对象添加规则,addrule(relateive.below,R.id.includetitle),把布局参数传入布局,改变开关变量,关闭过程为设置高度为68dp.

ADD方法参数为菜单ITEM,加入LIST中

新建LISTITEM ADAPTER类,建立adapterbase类,封装adapter,构造传入list,context赋予本地变量,设置变量为抽象类,可以避免强制实现GETVIEW方法,封装LAYOUTINFLATER属性,并初始化,增加GETCONTEXT方法

添加listview selector

在SLIDEMENUVIEW中初始化LISTVIEW,加入ADAPTER,设置点击事件

在ActivityFRAME中再次封装菜单,CREATESLIDEMENU(),传入菜单选项的ID,用getresource.getstringarry来转换为STRING[],新建ITEM,调用ADD,绑定数据源。

增加SLIDERMENUITEM的构造函数,传入ID和TITLE

绑定到slidemenuview上面(bind方法)

主Activity使用createslidemenu新建滑动窗口

----------------------------------------------------------------------------------

在slidemenueview中声明菜单ITEM点击接口,参数为view和slidemenuitem

设置接口变量,将传入的activity转化为接口类型,给变量赋值

在菜单的ONCLICK类中,使用得到的该变量,调用其中的方法

传入的变量ITEM项可以通过ADAPTER获取

在调用的activity中实现该接口,实现回调

(菜单封装完成)

------------------------------------------------------------------------

人员管理账本管理

封装SQLITEDATABASECONFIG类(数据库的配置)

  定义静态常量 Databasename,version,自身实例 instance(单例模式)

  实现方法静态,getinstance,取得自身的实例,instance为空,new一个,否则直接返回instance

  实现方法,返回数据库名,返回版本号

  实现GETTABLE方法,返回一个arraylist

封装SQLiteHelper类(帮助打开数据库,Update数据库)

  继承SQLiteOpenHelper类

  静态成员变量,SQLiteDatabaseConfig

  静态自身实例,instance

  成员变量context

  构造方法,传入context,调用父类构造函数,context,databasename,null,version

  给context赋值

  实现getinstance方法,传入context,返回instance

  实现createtable方法,获取sqlitedatabaseconfig的gettable方法,得到arraylist

封装SQLiteDALBase类(基本的数据库操作,删除,查询,执行SQL)

  抽象类

  成员变量,context,database对象,构造函数获取context,getcontext()

  getdatabase()返回database对象

  begaintransanction(),setransectionsuccessful(),endtransection()方法

  getcount方法,string[] = gettablenameandpk();(gettableandpk为抽象方法,在子类中实现的回调方法)

  执行SQL语句,

  (从数据库中按条件选择)

  返回为cursor类型

  execsql方法参数为string,返回为getdatabase().rawquery(参数语句,null)

  返回cursor的count,并关闭游标

  delete方法(通过表名和ID来删除指定项)

  内部调用getdatabase返回的对象的delete方法来实现

  实现findmodel方法,参数为游标,抽象方法,返回object对象

  实现cursortolist方法将cursor转化为list,先定义一个arraylist,在通过cursor.movetonext()以及findmodel方法加入list中,关闭cursor,返回list

补充:为slidemenuview中的底部布局添加按键事件(onkeylistener,如果按键为menu,执行toggle方法,actionup的时候才执行,需要设置焦点(setfocus为true))

建立一个model包

  新建User类(用户实体类)

  用户名,删除状态(int(方便增加状态类型)),创建日期,ID(注意责添加注释)

建立一个sqlitedal

  建立SQLiteDALuser类,实现对User的处理,继承SQLiteDALbase类

  实现两个抽象方法

  用可视化工具建立数据库表(SQLite)

  userid(int),username(char),data,state

  复制DDL语句

  在SQLiteHelper中定义接口,用来回调执行(Sqlitedatatable声明oncreate(sqlitedatabase),upgrate(sqlitedatabase) )

  在SQLITEDALBASE中IMPLEMENT,在该类的子类中实现上面两个方法

  在USERDAL类中新建INSERTUSER(MODEL)方法(用下面的方法获取contentvalues,getdatabase获得实例,调用insert(gettablenameandpk()[0],null,contentvalue))

  返回的ID放入model中,判断id是否大于0,返回布尔值

  封装contentvalues createparms(model)方法,新建content values对象将model中的各项属性(不包括ID)放入其中(put)方法,返回contentvalue对象

  封装日期操作的工具类(源代码中去抄)

-----------------------------------------------------------------------------------------------------------------------------------

  在gettablenameandpk中return new string[]{表名,PK}

  实现deleteuser(tablename,string condition)直接调用父类方法即可

  实现Updatauser(condition,model) getdatabase.update(name,contentvalue,condition,null)

  实现list getuser(condition)方法,内部定义String sql + condition getlist(sqltext)

  实现findmodel方法,新建model对象,通过cursor获取userid,username,data,state的值,传入model对象中

  实现initdefaultdata(sqlitedatabase)方法,初始化数据库内容,新建一个model,在string中建立string array,获取过来,循环赋值给model,加入contentvalue,database.insert(gettablename,null,contentvalue),在oncreate方法中调用init(database)

新建business包,封装业务逻辑类

建立业务类,businessuser

  成员变量 sqlitedaluser

  构造函数传入context,实例化dal对象

  封装DAL的insedrt等操作,对于结果做进一步处理

  实现deleteuserbyid(int id)建立 string condition "And userID = "+id

  调用DAL的删除方法,返回结果

  实现update(model)传入ID和model,调用dal update方法,返回结果

  实现getuser(condition)方法,传入条件,返回LIST

  实现model getuserbyid(int id)方法,调用getuser(condition),返回结果

  封装getuserlistbyid(string id[]),调用上面的方法,将查询到的结果循环放入一个新的LIST中,返回LIST

  新建getnothideuser(condition)方法,通过state属性获取未被隐藏用户

建立businessbase封装常用方法

 protected 构造函数传入context

 protected getstring(int presid),retrun context.getstring()

 protected getstring(id,object[]) return context.getstring(id, object[])

新建布局user linear布局,matchparent*2,内嵌listview

新建user item布局,相对布局,image+textview

新建adapteruser类

  在adapterbase中新增setlist方法,以便后面设置

  调用getnothideuser获得用户表,调用上面的方法设置LIST

  在GETVIEW方法中做相应改变

新建ActivityUser,做设置数据等操作

新建数组资源 数据库名

设置SQLITEDATABASECONFIG类的构造参数context

在SQLITEHELPER中的getinstance方法中调用sqlitedatabaseconfig的getinstance方法对成员进行初始化

在SQLITEDATABASECONFIG中的GETTABLE用上下文获取数组资源

获取包名,context.getpackagename

循环添加到LIST中,返回LIST

__________________}__________________________

新建反射工具类实例

调用其中的newinstance(classname,object[]{context},new class[]{context.class})获得SQLITEDATATABLE实例

调用实例的Oncreate(database)方法

在ADAPTER中对点击事件作出定义

---------------------------------------------

设置菜单样式,字体大小,居中,颜色等

新建添加/修改布局,一个EDITTEXT,包含HINT,maxlength=20

封装layoutinflator

新建警告框,添加或者修改,判断输入是否重复,判断是否合法,是否为点击保存,完毕之后刷新,关闭菜单

扫描二维码推送至手机访问。

版权声明:本文由u3blog发布,如需转载请注明出处。

本文链接:https://u3blog.xyz/?id=108

分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。