V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fyu2012
V2EX  ›  程序员

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

  •  
  •   fyu2012 · 2015-01-17 23:28:50 +08:00 · 9166 次点击
    这是一个创建于 3600 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个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/后端工程师

    18 条回复    2015-01-19 21:11:22 +08:00
    CtrlSpace
        1
    CtrlSpace  
       2015-01-18 01:27:49 +08:00 via Android
    工具库?前来关注
    alex110
        2
    alex110  
       2015-01-18 02:05:36 +08:00
    Retrofit+OkHttp+Picasso

    square公司确实是良心公司啊。
    我们现在用的volley,我正准备换成okhttp,最主要是因为spdy。
    MASAILA
        3
    MASAILA  
       2015-01-18 07:59:16 +08:00 via Android
    GhostFlying
        4
    GhostFlying  
       2015-01-18 09:25:13 +08:00 via Android
    我也在用这三个,的确好用
    q84629462
        5
    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
        6
    GhostFlying  
       2015-01-18 14:23:01 +08:00 via Android
    @q84629462
    1.需要添加recyclerview的依赖,手机不好打,看下文档就好了

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

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

    4.自带内存和磁盘缓存
    q84629462
        7
    q84629462  
       2015-01-18 15:49:25 +08:00
    @GhostFlying https://developer.android.com/training/material/lists-cards.html
    引用的方法居然放在最后。。。真是猜不透啊。。。
    q84629462
        8
    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
        9
    GhostFlying  
       2015-01-18 18:21:32 +08:00 via Android
    @q84629462 一定要实例化 LayoutManager 并且绑定,Adapater 倒是可以慢慢来
    q84629462
        10
    q84629462  
       2015-01-18 19:22:00 +08:00
    @GhostFlying 恩,对比着google官方说明发现了没赋值layout
    这个错误提示让我还以为是生成APK的时候没有加入RecyclerView导致的
    现在在烦item onclick呢
    q84629462
        11
    q84629462  
       2015-01-18 19:25:41 +08:00
    @GhostFlying 在2k分辨率的pad上滚动,好像不太流畅,viewholder就两个imageview,几个textview而已
    q84629462
        12
    q84629462  
       2015-01-18 19:30:35 +08:00
    @GhostFlying 找到原因了。。。在onScrollListener那里还没找到怎么判断滚到底就写了加载下一页数据。。。
    zgxltxz
        13
    zgxltxz  
       2015-01-19 08:08:07 +08:00 via Android
    RecycleView可以在L以下使用?怎么我添加support库后,可以在代码中用但是运行时就崩溃
    sonaive
        14
    sonaive  
       2015-01-19 08:59:29 +08:00 via Android
    @q84629462 onitemclick 还是采用viewcontainer set on click listener,别的方法不如这个好使。
    fyu2012
        15
    fyu2012  
    OP
       2015-01-19 13:48:59 +08:00
    q84629462
        16
    q84629462  
       2015-01-19 15:23:36 +08:00
    @fyu2012 额,这个是帮助我哪方面的?
    fyu2012
        17
    fyu2012  
    OP
       2015-01-19 19:46:12 +08:00
    @q84629462 性能优化,也许你的pad会更流畅。不过看不到你的代码和详细描述,只能自己试一下咯。
    q84629462
        18
    q84629462  
       2015-01-19 21:11:22 +08:00
    @fyu2012 嗯,之前是onScrollListener里没判断是否滚到底就直接加载下一页了,所以滚一下就加载
    12楼已经解释清楚了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1058 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:55 · PVG 03:55 · LAX 11:55 · JFK 14:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.