美文网首页
StatusManager-RecyclerView中的状态管理

StatusManager-RecyclerView中的状态管理

作者: BooQin | 来源:发表于2018-07-21 21:16 被阅读18次

    前言

    StatusManager用于关注,赞等状态的同步管理,从Miss项目的开发中总结出来的,进行了模块的解耦。

    效果先行

    status_manager

    关于StatusManager

    在社交类的App,点赞,关注等操作是一个很重要的元素。而在Miss项目的开放过程中,我们也加入了对应功能,设计过程中发现,通过RecyclerView来展示列表帖子,当触发关注操作时,你需要自己维护本地的dataset和界面的更新,并且存在多个子页面的情况下,必须保持多个页面间状态的同步。在实际开放过程中,总结如下:
      在RecyclerView来实现的列表展示模块中,当一个状态更新时,可分两部分,即Adapter中的Dataset和RecyclerView中显示的ViewHolder,你可以通过notifyDataSetChanged等类notify方法直接来更新界面,但这样可能会带来当前显示列表出现闪屏等现象。所以需要通过两种方式去更新。另外,不同的页面下进行状态相关操作,涉及到不同线程间的状态同步。这时就需要通过EventBus来进行数据通信,同时使用Rxjava来多个线程切换处理事件,降低主线程的占用率。

    模块的设计

    todo

    如何使用

    StatusManager提供了多个接口,对于RecyclerView,可以参考Demo,我已经实现了RecyclerViewStatusManager类,结合RecyclerView,我们需要通过以下几步来完成该模块的部署。

    • 实现IStatusBean,对应状态Bean
        该类对于于操作的元数据,即赞,关注,评论,浏览量等状态数据。你需要自己声明一个Bean类,并且实现IStatusBean,该接口提供了匹配状态key和状态类型字段。

    • 实现IStatusAdapter,对应RecyclerView中的Adapter
        需要通过Recycler中的Adapter实现该接口,通过该接口提供dataset的相关数据,以及需要更新时的回调。

    • 实现IStatusHolder,对应RecyclerView中的ViewHolder
        提供了key,以及更新界面的回调,直接更新ViewHolder的某一view,提高效率。

    • 使用RecyclerViewStatusManager
        传入RecyclerView实例化RecyclerViewStatusManager,在需要使用是调用mStatusManager.register()进行注册,在退出时调用mStatusManager.unregister()进行取消,避免内存泄露。

    
        @Override
        protected void onCreate(
                @Nullable
                        Bundle savedInstanceState) {
            ……
    
            mRecyclerView = (RecyclerView) findViewById(R.id.rv);
            ……
            mStatusManager = new RecyclerViewStatusManager(mRecyclerView);
            mStatusManager.setAdapter(statusRVAdapter);
            mStatusManager.register();
        }
    
        @Override
        protected void onDestroy() {
            ……
            mStatusManager.unregister();
        }
    
    • 发起更新
        直接通过RecyclerViewStatusManager.post(statusWrapper)发送包装好的Bean。
        StatusWrapper statusWrapper = new StatusWrapper(mFollowBean);
        RecyclerViewStatusManager.post(statusWrapper);
    

    相关文章

      网友评论

          本文标题:StatusManager-RecyclerView中的状态管理

          本文链接:https://www.haomeiwen.com/subject/sedkmftx.html