1.Model
public class Model { public void getModel(String page,String count){ ApiService apiService = RetrofitUtils.getInstance().doPost(Api.USER_URL, ApiService.class); Flowable<JsonBean> getshow = apiService.getshow(page, count); getshow.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeWith(new DisposableSubscriber<JsonBean>() { @Override public void onNext(JsonBean jsonBean) { List<DataBean> result = jsonBean.getResult(); if(modelListener!=null){ modelListener.onModel(result); } } @Override public void onError(Throwable t) { } @Override public void onComplete() { } }); } public interface onModelListener{ void onModel(List<DataBean> data); } onModelListener modelListener; public void setModelListener(onModelListener modelListener) { this.modelListener = modelListener; } }
2.Presenter
public class Presenter { private IView iView; private Model model; public Presenter(IView iView) { this.iView = iView; model = new Model(); } public void getPresenter(String page,String count){ model.getModel(page,count); model.setModelListener(new Model.onModelListener() { @Override public void onModel(List<DataBean> data) { iView.getShowView(data); } }); } }
3.Adapter
public class MyAdapter extends XRecyclerView.Adapter<MyAdapter.ViewHolder> { private Context context; private List<DataBean> list; public MyAdapter(Context context, List<DataBean> list) { this.context = context; this.list = list; } @NonNull @Override public MyAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { View view = LayoutInflater.from(context).inflate(R.layout.item, null); ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder(@NonNull MyAdapter.ViewHolder viewHolder, final int i) { AbstractDraweeController controller = Fresco.newDraweeControllerBuilder() .setUri(list.get(i).imageUrl) .setTapToRetryEnabled(true) .build(); viewHolder.sdv.setController(controller); viewHolder.name.setText(list.get(i).name); viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context,list.get(i).name,Toast.LENGTH_SHORT).show(); } }); } @Override public int getItemCount() { return list.size(); } public class ViewHolder extends XRecyclerView.ViewHolder { private TextView name; private SimpleDraweeView sdv; public ViewHolder(@NonNull View itemView) { super(itemView); name=itemView.findViewById(R.id.name); sdv=itemView.findViewById(R.id.sdv); } } }
4.MainActivity
public class MainActivity extends AppCompatActivity implements IView { @BindView(R.id.banner) XBanner banner; @BindView(R.id.rec) XRecyclerView rec; private String page = 1 + ""; private String count = 20 + ""; private Presenter presenter; private DataBeanDao dataBeanDao; private BannerPresenter bannerPresenter; private Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); presenter = new Presenter(this); presenter.getPresenter(page, count); GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2); rec.setLayoutManager(gridLayoutManager); bannerPresenter = new BannerPresenter(this); bannerPresenter.getBannerPresneter(); //获取userdao对象 dataBeanDao = GreenDaoManage.getInstance().getDaoSession().getDataBeanDao(); initData(); } private void initData() { boolean netWork = NetUtils.getNetWork(this); if (netWork) { //qingk dataBeanDao.deleteAll(); presenter.getPresenter(page, count); bannerPresenter.getBannerPresneter(); } else { //没网进行传数据库 List<DataBean> list = dataBeanDao.loadAll(); MyAdapter adapter = new MyAdapter(this, list); rec.setAdapter(adapter); } } @Override public void getShowView(List<DataBean> data) { for (int i = 0; i < data.size(); i++) { DataBean bean = data.get(i); dataBeanDao.insert(bean); } MyAdapter adapter = new MyAdapter(this, data); rec.setAdapter(adapter); } @Override public void getBannerView(final List<BannerBean.DataBeans> data) { this.runOnUiThread(new Runnable() { @Override public void run() { banner.setData(data, null); banner.loadImage(new XBanner.XBannerAdapter() { @Override public void loadBanner(XBanner banner, Object model, View view, int position) { Glide.with(MainActivity.this) .load(data.get(position).getImageUrl()) .into((ImageView) view); banner.setPageChangeDuration(3000); } }); } }); } }