MVP+Okhttp+Rxjava+多条目布局

//效果图



//依赖

compile 'io.reactivex.rxjava2:rxjava:+'
compile 'io.reactivex.rxjava2:rxandroid:+'
compile 'com.squareup.retrofit2:adapter-rxjava2:+'
compile 'com.squareup.retrofit2:retrofit:+'
compile 'com.squareup.retrofit2:converter-gson:+'
compile 'com.youth.banner:banner:1.4.9'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
compile 'com.android.support:recyclerview-v7:25.0.0'
compile 'com.jakewharton:butterknife:6.1.0'

//权限
 <uses-permission android:name="android.permission.INTERNET"></uses-permission>
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
 
//Model层
public interface IModel {
}
public class MyModel implements IModel{
    //查询
    public Observable<MyBean> select(){
        MyApi myApi = RetrofitManager.getinstance().create(MyApi.class);
        return  myApi.select();
    }
}
//View层
public interface IView {
}

public interface MyView extends IView{

    void Success(MyBean myBean);
    void Faild(Throwable throwable);
}

//Presenter层
public abstract class IPresenter<T extends IView> {
    protected T view;

    public IPresenter(T view) {
        this.view = view;
        init();
    }

    protected abstract void init();
}
package yanzhixiong20170108.yanzhixiong20180111.presenter;

import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
import yanzhixiong20170108.yanzhixiong20180111.model.MyModel;
import yanzhixiong20170108.yanzhixiong20180111.model.bean.MyBean;
import yanzhixiong20170108.yanzhixiong20180111.view.MyView;

/**
 * author:Created by YanZhiXiong on 2018/1/11.
 */

public class MyPresenter extends IPresenter<MyView>{

    private MyModel myModel;

    public MyPresenter(MyView view) {
        super(view);
    }

    @Override
    protected void init() {
        myModel=new MyModel();
    }
    //查询
    public void select(){
        Observable<MyBean> select = myModel.select();
        select.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<MyBean>() {
                               @Override
                               public void accept(MyBean myBean) throws Exception {
                                   view.Success(myBean);
                               }
                           }
                        , new Consumer<Throwable>() {
                            @Override
                            public void accept(Throwable throwable) throws Exception {
                                view.Faild(throwable);
                            }
                        }
                );
    }
}
//Api
public interface MyApi {

    @GET("ad/getAd")
    Observable<MyBean> select();
}

//工具类
package yanzhixiong20170108.yanzhixiong20180111.utils;

import java.util.concurrent.TimeUnit;

import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * author:Created by YanZhiXiong on 2018/1/11.
 */

public class RetrofitManager {

    private static final  String URL="http://120.27.23.105/";

    private static Retrofit    mRetrofit;

    private static class Holder{
        private static final RetrofitManager instance=new RetrofitManager(URL);
    }

    public static RetrofitManager getinstance() {
        return Holder.instance;
    }

    public RetrofitManager(String url) {
        mRetrofit=buildRetrofit();
    }

    //OkHttpClient
    private static OkHttpClient buildOkHttpClient(){
        return new OkHttpClient.Builder()
                .connectTimeout(10000, TimeUnit.MILLISECONDS)
                .build();
    }
    //Retrofit
    private static Retrofit buildRetrofit(){
        return new Retrofit.Builder()
                .client(buildOkHttpClient())
                .baseUrl(URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
    }

    public <T> T create(Class<T> tClass){
        return  mRetrofit.create(tClass);
    }
}

//图片加载器
package yanzhixiong20170108.yanzhixiong20180111.utils;

import android.content.Context;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.youth.banner.loader.ImageLoader;

/**
 * author:Created by YanZhiXiong on 2018/1/11.
 */

public class GlidApp extends ImageLoader{
    @Override
    public void displayImage(Context context, Object path, ImageView imageView) {
        Glide.with(context).load(path).into(imageView);
    }
}
//主视图
package yanzhixiong20170108.yanzhixiong20180111;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import butterknife.ButterKnife;
import butterknife.InjectView;
import yanzhixiong20170108.yanzhixiong20180111.adapter.MyAdapter;
import yanzhixiong20170108.yanzhixiong20180111.model.bean.MyBean;
import yanzhixiong20170108.yanzhixiong20180111.presenter.MyPresenter;
import yanzhixiong20170108.yanzhixiong20180111.view.MyView;

public class MainActivity extends AppCompatActivity implements MyView{


    @InjectView(R.id.rlv)
    RecyclerView rlv;

    private MyPresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.inject(this);

        presenter = new MyPresenter(this);
        rlv.setLayoutManager(new LinearLayoutManager(this));
        presenter.select();
    }

    @Override
    public void Success(MyBean myBean) {
        rlv.setAdapter(new MyAdapter(MainActivity.this,myBean));
    }

    @Override
    public void Faild(Throwable throwable) {

    }
}

//适配器 (主适配器)
package yanzhixiong20170108.yanzhixiong20180111.adapter;

import android.content.Context;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;

import com.youth.banner.Banner;

import java.util.ArrayList;
import java.util.List;

import yanzhixiong20170108.yanzhixiong20180111.R;
import yanzhixiong20170108.yanzhixiong20180111.model.bean.MyBean;
import yanzhixiong20170108.yanzhixiong20180111.utils.GlidApp;

/**
 * author:Created by YanZhiXiong on 2018/1/11.
 */

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
    Context context;
    MyBean myBean;

    public MyAdapter(Context context, MyBean myBean) {
        this.context = context;
        this.myBean = myBean;
    }

    @Override
    public int getItemViewType(int position) {
        if (position==0){
            return 0;
        }else if (position==1){
            return 1;
        }else {
            return 2;
        }
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType==0){
            View inflate = View.inflate(context, R.layout.item_ban,null);
            BanViewHolder banViewHolder = new BanViewHolder(inflate);
            return banViewHolder;
        }else if (viewType==1){
            View inflate = View.inflate(context, R.layout.item_rlv,null);
            RlvViewHolder rlvViewHolder = new RlvViewHolder(inflate);
            return rlvViewHolder;
        }else {
            View inflate = View.inflate(context, R.layout.item_list,null);
            ListViewHolder listViewHolder = new ListViewHolder(inflate);
            return listViewHolder;
        }
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (position==0){
            BanViewHolder banview= (BanViewHolder) holder;
            List<MyBean.DataBean> data = myBean.getData();
            final List<String> bannerUrl=new ArrayList<String>();
            for (int i = 0; i <data.size() ; i++) {
                bannerUrl.add(data.get(i).getIcon());
            }
            banview.item_ban.setImageLoader(new GlidApp()).setImages(bannerUrl).start();
        }else if (position==1){
            RlvViewHolder rlvview= (RlvViewHolder) holder;
            rlvview.item_rlv.setLayoutManager(new LinearLayoutManager(context,LinearLayoutManager.HORIZONTAL,true));
            RlvAdapter rlvadapter=new RlvAdapter(context,myBean.getMiaosha());
            rlvview.item_rlv.setAdapter(rlvadapter);

        }else {
            ListViewHolder listview= (ListViewHolder) holder;
            listview.item_list.setLayoutManager(new GridLayoutManager(context,2,GridLayoutManager.VERTICAL,true));
            ListAdapter1 listadapter=new ListAdapter1(context,myBean.getTuijian());
            listview.item_list.setAdapter(listadapter);
        }
    }
    @Override
    public int getItemCount() {
        return 3;
    }

    class BanViewHolder extends RecyclerView.ViewHolder{
        Banner item_ban;
        public BanViewHolder(View itemView) {
            super(itemView);
            item_ban=itemView.findViewById(R.id.item_ban);
        }
    }
    class RlvViewHolder extends RecyclerView.ViewHolder{
        RecyclerView item_rlv;
        public RlvViewHolder(View itemView) {
            super(itemView);
            item_rlv=itemView.findViewById(R.id.item_rlv);
        }
    }
    class ListViewHolder extends RecyclerView.ViewHolder{
        RecyclerView item_list;
        public ListViewHolder(View itemView) {
            super(itemView);
            item_list=itemView.findViewById(R.id.item_list);
        }
    }
}
//条目适配器-1
package yanzhixiong20170108.yanzhixiong20180111.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.bumptech.glide.Glide;

import yanzhixiong20170108.yanzhixiong20180111.R;
import yanzhixiong20170108.yanzhixiong20180111.model.bean.MyBean;

/**
 * author:Created by YanZhiXiong on 2018/1/11.
 */

public class RlvAdapter extends RecyclerView.Adapter<RlvAdapter.rlvViewHolder>{
    Context context;
    MyBean.MiaoshaBean miaoshaBean;

    public RlvAdapter(Context context, MyBean.MiaoshaBean miaoshaBean) {
        this.context = context;
        this.miaoshaBean = miaoshaBean;
    }

    @Override
    public rlvViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = View.inflate(context, R.layout.rlvview,null);
        rlvViewHolder rlvViewHolder = new rlvViewHolder(inflate);
        return rlvViewHolder;
    }

    @Override
    public void onBindViewHolder(rlvViewHolder holder, int position) {
        String images = miaoshaBean.getList().get(position).getImages();
        String[] split = images.split("\\|");
        Glide.with(context).load(split[0]).into(holder.rlv_img);
    }

    @Override
    public int getItemCount() {
        return miaoshaBean.getList().size();
    }

    class rlvViewHolder extends RecyclerView.ViewHolder{
        ImageView rlv_img;
        public rlvViewHolder(View itemView) {
            super(itemView);
            rlv_img=itemView.findViewById(R.id.rlv_img);
        }
    }
}
//条目适配器-2
package yanzhixiong20170108.yanzhixiong20180111.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.bumptech.glide.Glide;

import yanzhixiong20170108.yanzhixiong20180111.R;
import yanzhixiong20170108.yanzhixiong20180111.model.bean.MyBean;

/**
 * author:Created by YanZhiXiong on 2018/1/11.
 */

public class ListAdapter1 extends RecyclerView.Adapter<ListAdapter1.listViewHolder>{
    Context context;
    MyBean.TuijianBean tuijianBean;

    public ListAdapter1(Context context, MyBean.TuijianBean tuijianBean) {
        this.context = context;
        this.tuijianBean = tuijianBean;
    }

    @Override
    public listViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = View.inflate(context, R.layout.listitem, null);
        listViewHolder listViewHolder = new listViewHolder(inflate);
        return listViewHolder;
    }

    @Override
    public void onBindViewHolder(listViewHolder holder, int position) {
        String images = tuijianBean.getList().get(position).getImages();
        String[] split = images.split("\\|");
        Glide.with(context).load(split[0]).into(holder.listimg);
    }

    @Override
    public int getItemCount() {
        return tuijianBean.getList().size();
    }

    class listViewHolder extends RecyclerView.ViewHolder{
        ImageView listimg;
        public listViewHolder(View itemView) {
            super(itemView);
            listimg=itemView.findViewById(R.id.listimg);
        }
    }
}


//主布局
<android.support.v7.widget.RecyclerView
    android:id="@+id/rlv"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>

//主布局里创建视图布局-1

<com.youth.banner.Banner
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:id="@+id/item_ban"
    ></com.youth.banner.Banner>
//主布局里创建视图布局-2

<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/item_rlv"
    ></android.support.v7.widget.RecyclerView>
//主布局里创建视图布局-3
<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/item_list"
    ></android.support.v7.widget.RecyclerView>

//子布局布局-1
<ImageView
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:id="@+id/rlv_img"
    />
//子布局布局-2
<ImageView
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:id="@+id/listimg"
    />

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值