我在生产环境将 ListView 全部替换成了 RecyclerView

2015-01-17 23:28:50 +08:00
 fyu2012

这个App是这个:快看漫画

因为时间关系,体验上还有很多改进的地方(请感兴趣的各位在下面写一下改进点啦,谢谢^_^

为了开发速度和可维护性,用到的基本都是比较成熟的工具库:Retrofit+OkHttp+Picasso等。

在列表界面(带SectionHeader的ListView和GridView)以及内容界面(超过7种不同布局的控件类型,每个item高度不固定)采用的是support-v7新引入的 RecyclerView

个人感受是比搭配ViewHolder优化后的ListView性能好了很多,同时开发上维护性和扩展性都很不错。详细的开发经验和具体测试数据等有空的时候写出来分享。

再说下问题,从收集到的崩溃报告来看,最严重的问题是这个:IndexOutOfBoundsException in RecyclerView triggered by RecyclerView.onLayout()

希望刚开始学习Android开发的新手和大牛都来关注一下这个工具库。毕竟,现在很多Android应用滑动起来还是卡卡的。

同时这个团队也在招人-->[北京]《对不起,我只过 1%的生活》快看漫画团队招聘!技术经理/Android/iOS/后端工程师

8979 次点击
所在节点    程序员
18 条回复
CtrlSpace
2015-01-18 01:27:49 +08:00
工具库?前来关注
alex110
2015-01-18 02:05:36 +08:00
Retrofit+OkHttp+Picasso

square公司确实是良心公司啊。
我们现在用的volley,我正准备换成okhttp,最主要是因为spdy。
MASAILA
2015-01-18 07:59:16 +08:00
GhostFlying
2015-01-18 09:25:13 +08:00
我也在用这三个,的确好用
q84629462
2015-01-18 14:14:09 +08:00
我Android刚入门,
当前使用Android AsyncHttpClient负责网络读取(有时候需要携带cookie读取),json到java对象的转换是自己实现的,读取网络图片是用Android-Universal-Image-Loader
看了楼主的帖子之后有几个问题:
1、android studio v1+ 新建项目 gradle里自带了compile 'com.android.support:appcompat-v7:21.0.3'
但写代码输入recyc都没有提示RecyclerView,难道不是这个support v7?
2、看了一下Retrofit,我现在正在用AsyncHttpClient读取json然后自己写json到java对象的转换,Retrofit不需要这个过程吗?
3、okhttp要自己新建一个线程来用吗?https://raw.githubusercontent.com/square/okhttp/master/samples/guide/src/main/java/com/squareup/okhttp/guide/GetExample.java
看了这个例子感觉是在会阻塞当前线程?
4、picasso自带内存缓存管理和dis缓存管理吗?
@fyu2012 @GhostFlying
GhostFlying
2015-01-18 14:23:01 +08:00
@q84629462
1.需要添加recyclerview的依赖,手机不好打,看下文档就好了

2.retrofit 里用gson实现了这个转换

3.有异步方法,不过我都是同步用的

4.自带内存和磁盘缓存
q84629462
2015-01-18 15:49:25 +08:00
@GhostFlying https://developer.android.com/training/material/lists-cards.html
引用的方法居然放在最后。。。真是猜不透啊。。。
q84629462
2015-01-18 17:15:49 +08:00
@GhostFlying
build.gradle(Module: app) 的dependencies
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:recyclerview-v7:21.0.3'
compile 'com.squareup.picasso:picasso:2.4.0'
}
布局xml文件和代码里已经可以使用RecyclerView了,但运行的时候app崩溃报错
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView$LayoutManager.onMeasure(android.support.v7.widget.RecyclerView$Recycler, android.support.v7.widget.RecyclerView$State, int, int)' on a null object reference

第一次修改gradle引入组件,求教
GhostFlying
2015-01-18 18:21:32 +08:00
@q84629462 一定要实例化 LayoutManager 并且绑定,Adapater 倒是可以慢慢来
q84629462
2015-01-18 19:22:00 +08:00
@GhostFlying 恩,对比着google官方说明发现了没赋值layout
这个错误提示让我还以为是生成APK的时候没有加入RecyclerView导致的
现在在烦item onclick呢
q84629462
2015-01-18 19:25:41 +08:00
@GhostFlying 在2k分辨率的pad上滚动,好像不太流畅,viewholder就两个imageview,几个textview而已
q84629462
2015-01-18 19:30:35 +08:00
@GhostFlying 找到原因了。。。在onScrollListener那里还没找到怎么判断滚到底就写了加载下一页数据。。。
zgxltxz
2015-01-19 08:08:07 +08:00
RecycleView可以在L以下使用?怎么我添加support库后,可以在代码中用但是运行时就崩溃
sonaive
2015-01-19 08:59:29 +08:00
@q84629462 onitemclick 还是采用viewcontainer set on click listener,别的方法不如这个好使。
fyu2012
2015-01-19 13:48:59 +08:00
q84629462
2015-01-19 15:23:36 +08:00
@fyu2012 额,这个是帮助我哪方面的?
fyu2012
2015-01-19 19:46:12 +08:00
@q84629462 性能优化,也许你的pad会更流畅。不过看不到你的代码和详细描述,只能自己试一下咯。
q84629462
2015-01-19 21:11:22 +08:00
@fyu2012 嗯,之前是onScrollListener里没判断是否滚到底就直接加载下一页了,所以滚一下就加载
12楼已经解释清楚了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/163100

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX