package com.github.captain_miao.agera.tutorial.recycleview; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.widget.LinearLayoutManager; import com.github.captain_miao.agera.tutorial.R; import com.github.captain_miao.agera.tutorial.base.BaseActivity; import com.github.captain_miao.agera.tutorial.listener.SimpleObservable; import com.github.captain_miao.agera.tutorial.model.ApiResult; import com.github.captain_miao.agera.tutorial.model.GirlInfo; import com.github.captain_miao.agera.tutorial.supplier.GirlsSupplier; import com.github.captain_miao.recyclerviewutils.WrapperRecyclerView; import com.github.captain_miao.recyclerviewutils.listener.RefreshRecyclerViewListener; import com.google.android.agera.Function; import com.google.android.agera.Repositories; import com.google.android.agera.Repository; import com.google.android.agera.RepositoryConfig; import com.google.android.agera.Result; import com.google.android.agera.Supplier; import com.google.android.agera.rvadapter.RepositoryAdapter; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class RepositoryAdapterRecycleViewActivity extends BaseActivity implements RefreshRecyclerViewListener { private static final String TAG = "RepositoryAdapterRecycleViewActivity"; private WrapperRecyclerView mRefreshRecyclerView; private RepositoryAdapter mRepositoryAdapter; @Override public void init(Bundle savedInstanceState) { setContentView(R.layout.activity_recycle_view); mRefreshRecyclerView = (WrapperRecyclerView) findViewById(R.id.refresh_recycler_view); setUpRepository(); //can't add data mRepositoryAdapter = RepositoryAdapter.repositoryAdapter() .add(mRepository, new GirlInfoPresenter()) .build(); mRefreshRecyclerView.getRecyclerView().setAdapter(mRepositoryAdapter); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); mRefreshRecyclerView.setLayoutManager(linearLayoutManager); mRefreshRecyclerView.setRecyclerViewListener(this); mRefreshRecyclerView.disableLoadMore(); mRefreshRecyclerView.setPadding(0, 0, 0, 20); } @Override public void onRefresh() { mPagination = 1; mObservable.update(); mRefreshRecyclerView.refreshComplete(); } @Override public void onLoadMore(int pagination, int pageSize) { } // Agera //for agera private ExecutorService networkExecutor; private SimpleObservable mObservable; private Repository<Result<List<GirlInfo>>> mRepository; @Override protected void onResume() { super.onResume(); mRepositoryAdapter.startObserving(); } @Override protected void onPause() { super.onPause(); mRepositoryAdapter.stopObserving(); } @Override protected void onDestroy() { super.onDestroy(); networkExecutor.shutdown(); } private int mPagination = 1; private void setUpRepository() { networkExecutor = Executors.newSingleThreadExecutor(); mObservable = new SimpleObservable() { }; mRepository = Repositories.repositoryWithInitialValue(Result.<List<GirlInfo>>absent()) .observe(mObservable) .onUpdatesPerLoop() .goTo(networkExecutor) .getFrom(new GirlsSupplier(new Supplier<Integer>() { @NonNull @Override public Integer get() { return mPagination; } })) .thenTransform(new Function<Result<ApiResult<GirlInfo>>, Result<List<GirlInfo>>>() { @NonNull @Override public Result<List<GirlInfo>> apply(@NonNull Result<ApiResult<GirlInfo>> input) { if (input.succeeded() && !input.get().error) { return Result.success(input.get().results); } else { return Result.absent(); } } }) .onDeactivation(RepositoryConfig.SEND_INTERRUPT) .compile(); } }