android之ListView分组及字母索引导航(2)重构-接口

本文探讨了ListView分组和字母索引导航的实现,指出原有实现的不足,如Bo中多余字段和代码过于集中在Activity。通过代码重构,提出使用接口来降低耦合,将数据处理和Adaptor实现分离,创建一个通用的抽象Activity,以提高代码的复用性和可维护性。详细介绍了重构过程,包括RulerWidget的独立和Activity的抽象化。
摘要由CSDN通过智能技术生成

上篇文章对listView 分组和字母索引导航的实现思路做了分析,并依照思路一步步实现,到最后已经较好的实现了全部功能。但是仔细研究就会发现其实现不够好,主要问题:

1.               对于一个使用范围比较广泛的布局,以上实现不够通用,尤其是Bo中需加上一些多余的字段,这些字字段本身并没有意义。

2.               代码都糅合在activity中。

针对以上两点做一些代码重构。首先我们把其优化为一个通用的activity.这样做成通用的View就很容易;然后对代码进行抽取和重构。

想法和思路

以往代码的一个主要问题就是“污染”原有的Bo,而污染的主要原因是需要用这些附加的字段来进行数据处理和生成列表分组标签的时候使用。

原有代码如下:

public class TestBo {
 
    /**
     * 主要字段
     */
    private String boStr = null;
   
   
    /**
     * bo拼音缓存
     */
    private String boPinYin = null;
    /**
     * Bo标签标记
     */
    private String boTagFlag = null;
   
   
    public TestBo() {
       super();
    }
 
    public TestBo(String str) {
       super();
       this.boStr = str;
    }
   
   
    public String getBoStr() {
       return boStr;
    }
 
    public void setBoStr(String boStr) {
       this.boStr = boStr;
    }
 
    public String getSortStrPinyin() {
       return boPinYin;
    }
 
    public void setSortStrPinYin(String pinyin) {
       this.boPinYin = pinyin;
    }
 
    public void setTag(String tag) {
       this.boTagFlag = tag;
    }
    public String getTag() {
       return boTagFlag;
    }
}


其实以上Bo中真正有用的有主要字段,其他均为附加字段,其实生成列表只要要求Bo提供按照哪个字段分组就行了。

自然而然的我们就想到了接口,只要实现了相应的接口,接口方法返回需要“分组排序的值”。

数据处理做相应改变即可。

重构BO-接口

首先抽出以下接口:

public interface BoSort  {
 
    /**   
    * @date 2014-9-3
    * @Description: 获取索引的字符串
    * @param  
    * @return String
    */
    public String getSortStr();
    /**  
    * @date 2014-9-3
    * @Description: 获取索引字符串的拼音,这个最好可以有缓存
    * @param  
    * @return String
    */
    public String getSortStrPinyin();
   
    /**  
    * @date 2014-9-3
    * @Description:
    * @param  
    * @return void
    */
    public void setSortStrPinYin(String pinyin);
    /**  
    * @date 2014-9-3
    * @Description: 设置标签,需要缓存
    * @param  
    * @return void
    */
    public void setTag(String tag);
    /**  
    * @date 2014-9-3
    * @Description: 获取标签,如果为null,说明不是标签
    * @param  
    * @return String
    */
    public String getTag();
}


相应Bo实现以上接口即可。但是我们可以提供一个默认实现,这还是一个抽象类,Bo只要继承这个默认实现,并实现为实现的方法 public String getSortStr();

/**  
 * @date 2014-9-3
 * @Description: 只需实现 getSortStr 其他不要修改
   
 */
public  abstract class DefaultBoSortImp implements BoSort{
 
   
    /**
     * bo拼音缓存
     */
    private String boPinYin = null;
    /**
     * Bo标签标记
     */
    private String boTagFlag = null;
   
    /**
     * 一定要有这个构造函数
     */
    public DefaultBoSortImp() {
       s
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值