一.导入依赖
compile 'com.jcodecraeer:xrecyclerview:1.5.9'
二.xml布局
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/good_xRecycler"
android:layout_width="match_parent"
android:layout_height="match_parent"></com.jcodecraeer.xrecyclerview.XRecyclerView>
三.view层接口
public interface GoodVIew {
//展示数据
void showGoodsList(List<ShowBean.DataBean> show_list);
//刷新
void getRegFresh(List<ShowBean.DataBean> list);
//加载
void getLoadMore(List<ShowBean.DataBean> list);
//获取page
String getpage();
}
四.主方法 实现接口
public class GoodActivity extends AppCompatActivity implements GoodVIew {
@BindView(R.id.good_xRecycler)
XRecyclerView good_XRecycler;
private GoodAdapter goodAdapter;
List<ShowBean.DataBean> list = new ArrayList<>();
int page = 1;
private Presenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_good);
ButterKnife.bind(this);
// 给xrecycler一个布局
// 初始化数据
initviews();
presenter = new Presenter();
presenter.showgood(new MyModel(presenter), this);
}
// 初始化数据
private void initviews() {
good_XRecycler.setLayoutManager(new LinearLayoutManager(this));
// setLoadingMoreEnabled允许下拉刷新
good_XRecycler.setLoadingMoreEnabled(true);
// setPullRefreshEnabled允许上拉加载
good_XRecycler.setPullRefreshEnabled(true);
good_XRecycler.setLoadingListener(new XRecyclerView.LoadingListener() {
// 刷新
@Override
public void onRefresh() {
page = 1;
presenter.regFresh(new MyModel(presenter), GoodActivity.this);
good_XRecycler.refreshComplete();
}
//加载
@Override
public void onLoadMore() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
page++;
presenter.loadFresh(new MyModel(presenter), GoodActivity.this);
good_XRecycler.loadMoreComplete();
}
}, 1000);
}
});
}
//展示商品
@Override
public void showGoodsList(List<ShowBean.DataBean> show_list) {
Log.d("ccc", "-展示列表activity--获取到集合--------" + show_list);
goodAdapter = new GoodAdapter(this, show_list);
//放入适配器
good_XRecycler.setAdapter(goodAdapter);
}
//刷新
@Override
public void getRegFresh(List<ShowBean.DataBean> list) {
this.list = list;
// 在适配器里面给集合一个get set 方法就可以直接拿到集合
goodAdapter.setList(list);
// notifyDataSetChanged刷新
goodAdapter.notifyDataSetChanged();
}
//加载
@Override
public void getLoadMore(List<ShowBean.DataBean> list) {
goodAdapter.getList().addAll(list);
// notifyDataSetChanged刷新
goodAdapter.notifyDataSetChanged();
}
//获取page
@Override
public String getpage() {
return page + "";
}
}
五.model层写一个MyService接口 获得网络地址
public interface MyService {
//展示商品列表
@FormUrlEncoded
@POST("/product/getProducts")
Observable<ShowBean> getGoodsList(@FieldMap Map<String, String> map);
}
六.model层写一个接口 IModel
public interface IModel {
//展示数据
void showGood(Map<String, String> map);
//刷新
void getRefresh(Map<String, String> map);
//加载
void getLoadMore(Map<String, String> map);
}
七.model层写一个MyView 实现 IModel 接口
public class MyModel implements IModel {
private IPresenter iPresenter;
public MyModel(IPresenter iPresenter) {
this.iPresenter = iPresenter;
}
//-----------------------------------展示商品------------------------------------
@Override
public void showGood(Map<String, String> map) {
RetrofitUtils instance = RetrofitUtils.getRetrofitUtils();
MyService myService = instance.createService(MyService.class);
Observable<ShowBean> observable = myService.getGoodsList(map);
observable.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ShowBean>() {
@Override
public void onCompleted() {
Log.d("ccc", "onCompleted()-获取商品展示完成----------------");
}
@Override
public void onError(Throwable e) {
Log.d("ccc", "onError()-获取商品展示异常----------------" + e.getMessage());
}
@Override
public void onNext(ShowBean showBean) {
Log.d("ccc", "onNext()-获取商品展示-正在执行----------------" + showBean);
if (showBean.getCode().equals("0")) {
iPresenter.getGoodListData(showBean.getData());
}
}
});
}
//-----------------------------------刷新----------------------------
@Override
public void getRefresh(Map<String, String> map) {
RetrofitUtils instance = RetrofitUtils.getRetrofitUtils();
MyService myService = instance.createService(MyService.class);
Observable<ShowBean> observable = myService.getGoodsList(map);
observable.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ShowBean>() {
@Override
public void onCompleted() {
Log.d("ddd", "onCompleted()-刷新完成----------------");
}
@Override
public void onError(Throwable e) {
Log.d("ddd", "onError()-刷新展示异常----------------" + e.getMessage());
}
@Override
public void onNext(ShowBean showBean) {
Log.d("ddd", "onNext()-刷新-正在执行----------------" + showBean);
if (showBean.getCode().equals("0")) {
iPresenter.getRegFreshListData(showBean.getData());
}
}
});
}
//---------------------------加载----------------------------
@Override
public void getLoadMore(Map<String, String> map) {
RetrofitUtils instance = RetrofitUtils.getRetrofitUtils();
MyService myService = instance.createService(MyService.class);
Observable<ShowBean> observable = myService.getGoodsList(map);
observable.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ShowBean>() {
@Override
public void onCompleted() {
Log.d("eee", "onCompleted()-加载完成----------------");
}
@Override
public void onError(Throwable e) {
Log.d("eee", "onError()-加载展示异常----------------" + e.getMessage());
}
@Override
public void onNext(ShowBean showBean) {
Log.d("eee", "onNext()-加载-正在执行----------------" + showBean);
if (showBean.getCode().equals("0")) {
iPresenter.getLoadListData(showBean.getData());
}
}
});
}
}
八.在presenter写一个接口 IPresenter
public interface IPresenter {
// ---------------------展示商品------------------------------------
void showgood(IModel iModel, GoodVIew goodVIew);
void getGoodListData(List<ShowBean.DataBean> show_list);
// -----------------------刷新商品------------------------------------
void regFresh(IModel iModel, GoodVIew goodVIew);
void getRegFreshListData(List<ShowBean.DataBean> regfresh_list);
// -----------------------加载商品------------------------------------
void loadFresh(IModel iModel, GoodVIew goodVIew);
void getLoadListData(List<ShowBean.DataBean> load_list);
}
九.在presenter写一个接口 Presenter 实现 IPresenter 接口
public class Presenter implements IPresenter {
private IMyView iMyView;
private IRegView iRegView;
private GoodVIew goodVIew;
//-------------------------展示商品-------------------------------
@Override
public void showgood(IModel iModel, GoodVIew goodVIew) {
this.goodVIew = goodVIew;
Map<String, String> map = new HashMap<>();
// pscid=39&page=1
map.put("pscid", "39");
map.put("page", "1");
iModel.showGood(map);
}
@Override
public void getGoodListData(List<ShowBean.DataBean> show_list) {
Log.d("ccc", "--------p层展示");
goodVIew.showGoodsList(show_list);
}
//-------------------------刷新商品-------------------------------
@Override
public void regFresh(IModel iModel, GoodVIew goodVIew) {
Log.d("ddd", "--------p层刷新");
this.goodVIew = goodVIew;
Map<String, String> map = new HashMap<>();
map.put("page", goodVIew.getpage());
map.put("pscid", "39");
iModel.getRefresh(map);
}
@Override
public void getRegFreshListData(List<ShowBean.DataBean> regfresh_list) {
goodVIew.getLoadMore(regfresh_list);
}
//-------------------------加载商品-------------------------------
@Override
public void loadFresh(IModel iModel, GoodVIew goodVIew) {
this.goodVIew = goodVIew;
Map<String, String> map = new HashMap<>();
map.put("page", goodVIew.getpage());
map.put("pscid", "39");
iModel.getLoadMore(map);
}
@Override
public void getLoadListData(List<ShowBean.DataBean> load_list) {
goodVIew.getLoadMore(load_list);
}
}