V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
JasperHale
V2EX  ›  问与答

使用 rxjava 的 BehaviorSubject 实现懒加载的问题,

  •  
  •   JasperHale · 2018-01-14 15:24:19 +08:00 · 1647 次点击
    这是一个创建于 2459 天前的主题,其中的信息可能已经有所发展或是发生改变。

    • 个人项目,卡了很久了,实在是很无奈.水平有限,没有很好的求助地方,发个求助帖,有偿.
    • 提供思路的,铜币,能解决/指出错误,不多大概几十到一百吧..问题可能比较简单,但我是没啥思路了,回报不多,浪费各位点时间,现行谢谢!
    • 如果有违反了,论坛发帖规则,先 90°.

    描述

    • 主体是 Activity + ViewPager + Fragment, Fragment 的 recyclerview 加载列表.

    • MainViewModel 中持有 FragmentViewModel 和 MainRepository 实例.(MainRepository 实现数据获取).MainViewModel 中实现了 MainActicity 的LifecycleObserver接口,可以在 Acticity creat resume 等等时候,做一些数据操作.

    • 整体是 MVVM,直接对 FragmentViewModel 的实例执行xxx.set(items)设置数据,对应 recyclerview 就能刷新数据(不用考虑线程问题)

    • 整体需要实现的功能,如图草图.png

    • 源码地址 > https://github.com/Jasper-1024/MyPrivacy/tree/MVVM_test/app/src/main/java/com/jasperhale/myprivacy/Activity 暂时比较乱,还没整理.

    • 我尝试使用 rxjava 的 BehaviorSubject 来实现这个过程.

      • 在 FragmentViewModel 中新建一个 public 的 BehaviorSubject

      • MainRepository 获取数据过程包装成一个Observable <ObservableList> applistObservable

      • 在 FragmentViewModel 将设置过程(xxx.set(items))包装成一个 Observer<ObservableList> setObserver

      • 在 MainActicity creat/destory 时候 绑定 /解绑 applistObservable.subscribe(behaviorSubject);

      • 在 Fragment creat/destory 时候 绑定 /解绑 behaviorSubject.subscribe(setObserver);

    问题

    • 表现: recycleerview 没有显示数据.
    • 在 MainRepository 里面的 applistObservable 打印显示已经完成了获取,但 FragmentViewModel 里面的 setObserver 没有收到数据.
    • 稍微改一点地方(log 打印),android studio 的 instant run 刷新后对应列表显示正常.

    其他

    • 个人开源项目,不涉及商业问题.
    • 因为这个卡了很久了,有偿求教.
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2878 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 00:34 · PVG 08:34 · LAX 17:34 · JFK 20:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.