首先来说下关于历史记录的存储,历史记录的存储方式其实可以有很多方法,可以用sp,数据库等等,那么就直接开撸吧。说开撸你还真以为就直接开撸了,还是先想想吧,我们做历史记录存储的时候需要提供什么给调用者,其实很简单无非就是可以增删改查吗。为了遵守里氏替换原则,就先写了个抽象类baseHistoryStorage,里面有几个抽象方法,至于是什么自己看吧。这样不管你是用SP还是数据库甚至其他更牛的技术,只需要集成base类,实现这些抽象方法就行了,至于你是怎么实现的,我才不管呢。
上面的代码很好理解,SearchHistoryModel是我写的一个JavaBean,里面就放了两个String,一个是历史搜索的内容,一个是历史记录的Key,其实你直接返回一个String泛型的ArrayList的就行,但是我这里为了用SP实现的时候跟快速偷了个懒,好了自己去实现一个历史记录存储功能把。
通过SharedPreference实现数据存储
听到让你自己去实现是不是心凉了一半,当然是逗你的了,既然都来了怎么能不给你点福利呢,下面我就实现一个简单的通过SharedPreference实现的数据存储吧,来抛砖迎玉吧。
作为一个励志成为高逼格的高级程序员的菜鸟,当然不会放过任何装逼的机会,对于这种比较耗资源的数据存储,将他设计为单例模式当然最合适不过了,上面就是一个简单的DCL的单例模式实现,在安卓中将Context传入到单例中是一个大忌,你试想一下你的activity永远得不到释放是一件多么恐怖的事情,所以我就换成了applicationContext,反正他是跟随程序一直在的。 然后来看看里面的方法实现吧
上面这个方法就是为了存储的时候根据当前时间生成的一个Key,用来判断先后顺序。
这个方法就是从SharedPreferences取出所有的值并且按照时间先后进行排序。
保存的方法,需要先判断是否已经存在,存在的话就先删除然后根据最新的时间保存。剩下两个移除和清空的方法就自己看吧。
好了,通过sharedPreferences存储历史记录的功能就这样完成了,但是心里一想好久没有写数据库相关的代码了,就简单的撸了一个通过数据库存储的方法,篇幅有限代码就不贴了,想看的点这里。其实这里的代码借鉴了remusic的搜索记录存储的实现,有什么问题找他去→_→。
界面的实现就比较朴素了,毕竟我们都是比较注重内在的人,代码就不贴了,上面一个EditText,下面一个ListView再带上一个清空的按钮。界面写好了之后呢,先给ListView撸个adapter吧,也很简单继承baseAdapter,实现下方法,然后暴露个接口出来,用于单条历史记录被点击和删除的时候用。
界面撸完了,接着就需要将数据和界面联系起来了,这里就不得不再推荐一下MVP模式了,Model和View都由中间层Presenter来控制,使得逻辑看起来变得很清晰,所以这里就用MVP模式写了,其实我是怕自己把各位绕糊涂。
presenter要做的事情就是,当View被操作后,通知它去做数据操作,即增删改查,而Model只需要在presenter告诉它做什么的时候去做就行,成功之后再回调presenter去通知View,这里View就只需要两个操作,搜索成功后界面的切换以及历史记录的显示。那接下来就来实现一下model,presenter和View。
在初始化presenter的同时引用了View和Model,然后实现OnSearchListener当model完成操作是回调view中的方法。代码自己看吧,应该没有任何疑问。
model中的内容就简单了,创建一个前面实现的baseStorage对象,对数据进行操作,这里没有对搜索做什么处理直接通过回调返回了传进来的字符串,在实际开发中应该是去请求接口,返回参数,所以在View中也没有做具体的处理,实际开发中可以打开一个新的页面后者,切换列表显示搜索到的内容。
上面就是View中实现的方法,获得历史记录是,告诉adapter去刷新列表就行了。接下来就只剩下View中一些简单的点击事件的处理了,搜索的时候调用,清空的时候调用是不是感觉so easy,妈妈再也不用担心我的学习了,当然别忘了presenter需要在activity的onCreate方法中进行实例化。 最后呢,再给大家介绍几个技巧:
- 不要忘记把搜索框EditText设置成Search模式 设置完以后不要忘记对键盘上的搜索按钮的监听
- 我们看到很多软件都会做模糊搜索的操作,你一输入列表就会弹出很多相关的词汇供你点击,顿时感觉好贴心哦,其实这个功能要实现也不能,通过给editText设置监听以及Handler延时发送消息就能够实现了。
啰嗦了这么半天,最后还是附上代码吧,searchBar 有什么Bug和可以优化的地方还是希望大家能够留言,你们都将是菜鸡成长路上的恩师。
本文地址:http://sjzytwl.xhstdz.com/quote/64166.html 物流园资讯网 http://sjzytwl.xhstdz.com/ , 查看更多