一.導入依賴
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);
}
}