搞定Android Agera-03

Agera一句话总结:通过事件源驱动指令串执行并提供数据[push event, pull data],对于执行前、执行中的分支处理缺少,等待官方更新。
适合场景:事件源集中,对数据处理简单。

下拉刷新、上拉加载的事件定义

下拉刷新、上拉加载其实就是分页加载,需要提供下拉刷新、上拉加载的事件和页数数据提供,可以定义成一个Repository

    // 默认值
    private int mPagination = 1;
    private MutableRepository<Integer> mMutableRepository;
    // 可提供变化的数据源(accept输入->get输出),数据变化时通知事件
    mMutableRepository = Repositories.mutableRepository(mPagination);

    @Override
    public void onRefresh() {
        mPagination = 1;
        // 更新页数 并 update
        mMutableRepository.accept(mPagination);
    }

    @Override
    public void onLoadMore(int pagination, int pageSize) {
        mRefreshRecyclerView.showLoadMoreView();
        mPagination = pagination;
        // 更新页数 并 update
        mMutableRepository.accept(mPagination);
    }


分页加载数据

通过下拉刷新、上拉加载的事件和页数来加载数据

mLoadDataRepository = Repositories.repositoryWithInitialValue(Result.<ApiResult<GirlInfo>>absent())
        .observe(mMutableRepository)
        .onUpdatesPerLoop()
        .goTo(networkExecutor)
        .attemptGetFrom(new GirlsSupplier(mMutableRepository)).orSkip()
        .thenTransform(new Function<ApiResult<GirlInfo>, Result<ApiResult<GirlInfo>>>() {
            @NonNull
            @Override
            public Result<ApiResult<GirlInfo>> apply(@NonNull ApiResult<GirlInfo> input) {
                return absentIfNull(input);
            }
        })
        .onDeactivation(RepositoryConfig.SEND_INTERRUPT)
        .compile();

RecycleView 数据更新

更新RecycleView比较蛋疼,需要区分下拉和刷新。。。

    @Override
    public void update() {
        Result<ApiResult<GirlInfo>> result = mLoadDataRepository.get();

        result.ifSucceededSendTo(xxx).ifFailedSendTo(yyy);
    }

GitHub地址

AndroidAgeraTutorial

发表评论

电子邮件地址不会被公开。 必填项已用*标注