我在生产环境将 ListView 全部替换成了 RecyclerView - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
fyu2012
V2EX    程序员

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

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

    这个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     Solana     2704 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 02:32 PVG 10:32 LAX 18:32 JFK 21:32
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86