MVP+Retrofit+RxJava实现分类
2017-12-08 20:40
295 查看
上一篇实现分类用的是OKHttp,这个是Retrofit+RxJava,左右两边是两个recyclerview,右边的Recyclerview里面有一个TextView和GridView,点击左边的条目实现右边数据的变化。
依赖、布局、Bean类都在上一篇就不写了直接开始代码了
先是工具类的东西了
实现GridView布局的类
封装的Retrofit类
MODEL层
View层
Presenter层
下面是适配器啦
右边的布局里网格布局的适配器
右边的Recyclerview的适配器
MainActivity中的
依赖、布局、Bean类都在上一篇就不写了直接开始代码了
先是工具类的东西了
实现GridView布局的类
public class RightGridView extends GridView{ public RightGridView(Context context) { super(context); } public RightGridView(Context context, AttributeSet attrs) { super(context, attrs); } public RightGridView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expendSpec=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expendSpec); } }
封装的Retrofit类
public class RetrofitManager { private Retrofit mRetrofit; private String baseUrl; OkHttpClient client;//有关拦截器 private static RetrofitManager mRetrofitManager; private RetrofitManager(){} private RetrofitManager(String baseUrl,OkHttpClient client){ this.baseUrl=baseUrl; this.client=client;//有关拦截器 initRetrofit(); } public static synchronized RetrofitManager getInstance(String baseUrl,OkHttpClient client){//有关拦截器 if (mRetrofitManager == null){ mRetrofitManager = new RetrofitManager(baseUrl,client); } return mRetrofitManager; } private void initRetrofit() { mRetrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .client(client)//有关拦截器 .build(); } public <T> T setCreate(Class<T> reqServer){ return mRetrofit.create(reqServer); } }
public interface LeftUrl { @GET("index.php?act=goods_class") Observable<ClassifyLeft> getLeft(); } public interface RightUrl { @GET("index.php?act=goods_class&op=get_child_all&") Observable<ClassifyRight> getRight(@Query("gc_id") String gc_id); }
MODEL层
左边的数据 public interface ILeftDataModel { public void getLeftData(Observer observer); } public class LeftDataModel implements ILeftDataModel { @Override public void getLeftData(Observer observer) { OkHttpClient client=new OkHttpClient.Builder().build(); RetrofitManager.getInstance("http://169.254.194.209/mobile/",client).setCreate(LeftUrl.class).getLeft().observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(observer); } } 右边的数据 public interface IRightDataModel { public void getRightData(String gc_id,Observer observer); } public class RightDataModel implements IRightDataModel { @Override public void getRightData(String gc_id, Observer observer) { OkHttpClient client=new OkHttpClient.Builder().build(); RetrofitManager.getInstance("http://169.254.194.209/mobile/",client).setCreate(RightUrl.class).getRight(gc_id).observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(observer); } }
View层
public interface ILeftDataView { public void showLeft(List<ClassifyLeft.DatasBean.ClassListBean> leftlist); } public interface IRightDataView { public void showRight(List<ClassifyRight.DatasBean.ClassListBean> rightlist); public String getGc_id(); }
Presenter层
public class LeftPresenter { LeftDataModel model; ILeftDataView view; List<ClassifyLeft.DatasBean.ClassListBean> leftlist=new ArrayList<>(); public LeftPresenter(ILeftDataView view) { this.view = view; model=new LeftDataModel(); } public void lpGetData(){ model.getLeftData(new Observer<ClassifyLeft>(){ @Override public void onCompleted() { } @Override public void onError(Throwable e) { Log.i("111111","onError"); } @Override public void onNext(ClassifyLeft classifyLeft) { leftlist.addAll(classifyLeft.getDatas().getClass_list()); view.showLeft(leftlist); Log.i("111111","onNext"+leftlist); } }); } } 右边的 public class RightPresenter { RightDataModel model; IRightDataView view; List<ClassifyRight.DatasBean.ClassListBean> rightlist=new ArrayList<>(); public RightPresenter(IRightDataView view) { this.view = view; model=new RightDataModel(); } public void rpGetData(){ String gc_id=view.getGc_id(); model.getRightData(gc_id,new Observer<ClassifyRight>(){ @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(ClassifyRight classifyRight) { //要先清空右边的数据再添加,不然点击左边的条目时右边的数据会出现追加的效果 rightlist.clear(); rightlist.addAll(classifyRight.getDatas().getClass_list()); view.showRight(rightlist); } }); } }
下面是适配器啦
左边适配器没什么不同的 public class LeftAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { Context context; List<ClassifyLeft.DatasBean.ClassListBean> leftlist; OnItemClickListener listener; public LeftAdapter(Context context, List<ClassifyLeft.DatasBean.ClassListBean> leftlist) { this.context = context; this.leftlist = leftlist; } public interface OnItemClickListener{ public void OnItemClick(View view,int position); } public void setOnItemClick(OnItemClickListener listener){ this.listener=listener; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view=View.inflate(context,R.layout.left_item,null); return new LeftHolder(view); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { ((LeftHolder)holder).tv_left.setText(leftlist.get(position).getGc_name()); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(listener!=null){ listener.OnItemClick(v,position); } } }); } @Override public int getItemCount() { return leftlist!=null?leftlist.size():0; } class LeftHolder extends RecyclerView.ViewHolder{ TextView tv_left; public LeftHolder(View itemView) { super(itemView); tv_left=itemView.findViewById(R.id.tv_left); } } }
右边的布局里网格布局的适配器
public class GridAdapter extends BaseAdapter{ List<String> list; Context context; public GridAdapter( Context context,List<String> list) { this.list = list; this.context = context; } @Override public int getCount() { return list!=null?list.size():0; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { GridHolder holder; if(convertView==null){ convertView=View.inflate(context, R.layout.grid_item,null); holder=new GridHolder(); holder.tv_grid=convertView.findViewById(R.id.tv_grid); convertView.setTag(holder); }else{ holder= (GridHolder) convertView.getTag(); } holder.tv_grid.setText(list.get(position)); return convertView; } class GridHolder{ TextView tv_grid; } }
右边的Recyclerview的适配器
public class RightAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { Context context; List<ClassifyRight.DatasBean.ClassListBean> rightlist; public RightAdapter(Context context, List<ClassifyRight.DatasBean.ClassListBean> rightlist) { this.context = context; this.rightlist = rightlist; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view=View.inflate(context,R.layout.right_item,null); return new RightHolder(view); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { ((RightHolder)holder).tv_right_top.setText(rightlist.get(position).getGc_name()); //给GridView赋值 List<String> list=new ArrayList<>(); for(int i=0;i<rightlist.get(position).getChild().size();i++){ list.add(rightlist.get(position).getChild().get(i).getGc_name()); } GridAdapter gridAdapter=new GridAdapter(context,list); ((RightHolder)holder).gv_right.setAdapter(gridAdapter); } @Override public int getItemCount() { return rightlist!=null?rightlist.size():0; } class RightHolder extends RecyclerView.ViewHolder{ TextView tv_right_top; GridView gv_right; public RightHolder(View itemView) { super(itemView); tv_right_top=itemView.findViewById(R.id.tv_right_top); gv_right=itemView.findViewById(R.id.gv_right); } } }
MainActivity中的
public class MainActivity extends AppCompatActivity implements ILeftDataView, IRightDataView { LeftAdapter leftAdapter; RightAdapter rightAdapter; List<ClassifyRight.DatasBean.ClassListBean> rightlist=new ArrayList<>(); List<ClassifyLeft.DatasBean.ClassListBean> leftlist = new ArrayList<>(); String gc_id ="1"; private RecyclerView mRvLeft; private RecyclerView mRvRight; LeftPresenter leftPresenter; RightPresenter rightPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); leftPresenter=new LeftPresenter(this); showLeft(leftlist); leftPresenter.lpGetData(); rightPresenter=new RightPresenter(this); showRight(rightlist); rightPresenter.rpGetData(); } @Override public void showLeft(final List<ClassifyLeft.DatasBean.ClassListBean> leftlist) { LinearLayoutManager manager=new LinearLayoutManager(this); mRvLeft.setLayoutManager(manager); leftAdapter=new LeftAdapter(this,leftlist); mRvLeft.setAdapter(leftAdapter); //点击左边的item给右边的接口参数传值 leftAdapter.setOnItemClick(new LeftAdapter.OnItemClickListener() { @Override public void OnItemClick(View view, int position) { gc_id=leftlist.get(position).getGc_id(); rightPresenter.rpGetData(); rightAdapter.notifyDataSetChanged(); } }); } @Override public void showRight(List<ClassifyRight.DatasBean.ClassListBean> rightlist) { LinearLayoutManager manager=new LinearLayoutManager(this); mRvRight.setLayoutManager(manager); rightAdapter=new RightAdapter(this,rightlist); mRvRight.setAdapter(rightAdapter); } @Override public String getGc_id() { return gc_id; } private void initView() { mRvLeft = (RecyclerView) findViewById(R.id.rv_left); mRvRight = (RecyclerView) findViewById(R.id.rv_right); } }
相关文章推荐
- 使用MVP+Retrofit+RXJava实现仿京东分类
- 使用RXjava+Retrofit+MVP实现仿京东购物车
- RxJava+Retrofit+MVP实现相册相机图片上传
- 使用rxjava,retrofit,okhttp实现mvp模式的数据解析
- Retrofit+RxJava+Mvp实现多线程视频下载
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- Android-MVP+Retrofit+Rxjava实现一个知乎日报客户端
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- Retrofit+rxjava+mvp实现登录
- 使用MVP框架,retrofit结合Rxjava以及fresco加载图片,用recycleview实现
- Android Retrofit+Rxjava+MVP+EventBus+ButterKnife实现接口登录(无正则表达式)
- MVP+RXJAVA+Retrofit+Fresco实现简单的效果
- (安卓) MVP 框架 (Rxjava2+Retrofit)结合 实现网络请求
- MVP+Retrofit2+RxJava京东的分类页面
- 使用MVP+Retrofit+RxJava实现的的Android Demo (下)使用Retrofit+RxJava处理网络请求
- 终极封装 Rxjava+Retrofit+okhttp+mvp实现
- Rxjava+Retrofit+MVP实现购物车功能
- MVP+RxJava+Retrofit实现Banner图
- Android 框架设计Demo,一个简单的MVP示例搜索功能,网络请求用Retrofit+RxJava实现
- Rxjava+Retrofit+okhttp+mvp实现