面向对象的设计方式处理Android编程中的GridView问题,以及自定义ListAdapter的使用

来源:互联网 发布:广州java培训价格 编辑:程序博客网 时间:2024/05/22 17:05

 

本文主要实现如下功能:登陆界面经过通信线程鉴权后返回各种权限,权限对应各种功能模块,打算将各种功能模块以GridView方式显示给用户,GridView中放置各种功能图标,如果权限不足则置灰。

 

界面参考如下图片(软件来自电信内部掌上办公平台):

 

登陆界面在这里不再赘述,本文主要关心以面向对象的方式来构建GridView,以及自定义ListAdapter的使用来个化GridView中Item的显示方式。

 

首先,本Activity是一个fullparent的GridView,其XML代码没什么技术含量,拷贝如下:

 

 

接下来要设计GridView中的元素,也就是本例中的功能按钮,每个按钮的图标不同,显示的名字也不同,最重要的是其onClick事件也不同。很多朋友处理这类问题的时候会编写大量的if和switch语句,我一贯的宗旨是尽量少用甚至不用switch分支,以面向对象的方式提高代码的可复用、可扩展、可读等能。

 

闲话少说,开始设计GridView中的Item样式,编写元素布局文件menu_item.xml:

 

可以看到,很简单的一个View组合,上面是一个居中摆放的ImageView,下面是一个居中摆放的TextView,这就是功能按钮的通用布局,至于每个按钮的具体设计,这边还不用考虑。

 

下面进行面向对象的分析,构造Function抽象父类,将所的功能按钮都看成是一个Function的一个子类,不同的功能按钮继承Function,在各自的构造函数中对该功能的图标,文字进行定义,与此同时实现该功能的点击事件处理。

 

Function父类的设计如下:

初步实现一个功能按钮,我这边是一个叫“释放号码”的功能,代码如下:

在实现一个功能按钮,用做比较,名叫“经营报表”的功能按钮,代码如下:

这样就基本以面向对象的方式,设计好功能按钮的框架了,以后如果项目需要新的功能添加,则仅需添加一个类,继承Function父类,做好相关的png和功能名资源,设置好onClick事件就OK了,避免了大量的switch语句去响应GridView的那个什么onSelectItem事件,还要在里面提取各种序列,应用程序改变功能按钮显示的顺序都变得很麻烦。

了这样的结构,下面一部就是让GridView认识咱们的Function,这里需要用到自定义Adapter适配器,GridView需要一个ListAdapter来解析子元素,系统提供一个自带的SimpleListAdapter,很是不好用,仅可以传输限的数据和统一化的显示方法,这里需要让GridView认识Function就必须自己写适配器,适配器继承一个叫BaseAdaper的类即可,适配器名为FunctionsAdapter,代码如下:

编写自定义适配器没想象中恐怖,继承BaseAdapter后,Eclipse会自动要求你实现这么几个函数,首先是构造函数,这个你只要传个上下文context和数据源过来就行,context就是上下文,这个在UI编程中一直要传递,Activity类的this对象就行了,数据源我们这里是一个Function类型的数组,包含了所要在界面上显示的Function,当然你在构造的时候都必须用Function的子类来构造。除了构造函数以外,getCount、getItem、getItemId这三个函数也要你重写,看我的代码就知道纯粹是划水质的,不再赘述,最重要的是一个getView的函数,这个函数将返回一个View给GridView作为Item使用,相当于迭代生成所的GridView中要显示的元素,注释写的很详细了,大家看着应该能明白个中含义。

最终在Activity中生成整个GridView的代码,如下:

显示界面如以下个图所示:

        

0 0
原创粉丝点击