XRecyclerView 多条目加载

来源:互联网 发布:淘宝便利店入口 编辑:程序博客网 时间:2024/06/10 18:01
先依赖好吧
//recyclerViewcompile 'com.android.support:mediarouter-v7:25.0.0'compile 'com.android.support:appcompat-v7:25.0.0'compile 'com.android.support:recyclerview-v7:25.0.0'//xrecyclercompile 'com.jcodecraeer:xrecyclerview:1.3.2'
//retrofit rxjava rxandroid    compile 'com.squareup.retrofit2:retrofit:2.0.1'    compile 'com.squareup.retrofit2:converter-gson:2.0.1'    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'    compile 'io.reactivex:rxandroid:1.1.0'    compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
使用mvp模式
view层 实现接口
public interface iview {    void getUser(HomeBean.DataBean list);}
model层 创建接口
public interface imodel {    void getData(String url);}
创建类实现接口方法
public class MyModel implements imodel {    HomeBean.DataBean list;    private OnFinishLisenter lisenter;    public interface OnFinishLisenter{        //得到数据        void OnFinish(HomeBean.DataBean list);    }    public void setOnUserModel(OnFinishLisenter lisenter) {        this.lisenter = lisenter;    }    @Override    public void getData(String url) {        Observable<HomeBean> home = RetroFactory.getInstance().getjson();        home.subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Observer<HomeBean>() {                    @Override                    public void onCompleted() {                    }                    @Override                    public void onError(Throwable e) {                    }                    @Override                    public void onNext(HomeBean homeBean) {                        list=homeBean.getData();                        lisenter.OnFinish(list);//                        adapter=new HomeAdapter(homeBean.getData(),getActivity());//                        xr.setAdapter(adapter);                    }                });    }}
presenter层 让model和view层进行数据交互
public class MyPresenter implements MyModel.OnFinishLisenter {    private final iview userview;    private final MyModel myModel;    public MyPresenter(iview userview) {        this.userview = userview;        this.myModel=new MyModel();        myModel.setOnUserModel(this);    }    public void getUrl(String url) {        //得到Model中请求数据的方法        myModel.getData(url);    }    @Override    public void OnFinish(HomeBean.DataBean list) {        userview.getUser(list);    }}
XRecyclerview的适配器
public class HomeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements onItemClickListener{    Context context;    HomeBean.DataBean list;    public HomeAdapter(HomeBean.DataBean list, Context context) {        this.list = list;        this.context = context;    }    ArrayList  mlist;    @Override    public void onItemClick(int position, View itemView) {        Intent i = new Intent(context, ThingsActivity.class);        context.startActivity(i);    }    //枚举类型    private  enum  Item_Type{        Typeone ,Typetwo,Typethree,Typefour    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        if (viewType == Item_Type.Typeone.ordinal()) {            View mView = LayoutInflater.from(context).inflate(R.layout.item_home_banner, null);            BannerViewHolder viewHolder = new BannerViewHolder(mView);            return viewHolder;        } else if (viewType == Item_Type.Typetwo.ordinal()) {            View mView = LayoutInflater.from(context).inflate(R.layout.item_home_part2, null);            PartTwoViewHolder viewHolder = new PartTwoViewHolder(mView);            return viewHolder;        } else if (viewType == Item_Type.Typethree.ordinal()) {            View mView = LayoutInflater.from(context).inflate(R.layout.item_homoe_part3, null);            PartThreeViewHolder viewHolder = new PartThreeViewHolder(mView);            return viewHolder;        }else if (viewType == Item_Type.Typefour.ordinal()) {            View mView = LayoutInflater.from(context).inflate(R.layout.item_home_list, null);            MyViewholder viewHolder = new MyViewholder(mView);            return viewHolder;        }        return null;    }    //创建接口类型变量(接受传值并设置事件)    private onItemClickListener mOnItemClickListener;    //暴露设置接口的方法    public void setOnItemClickListener(onItemClickListener mOnItemClickListener){        this.mOnItemClickListener = mOnItemClickListener;    }    @Override    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {        if (holder instanceof BannerViewHolder) {            mlist = new ArrayList();            for (int i = 0; i < list.getAd1().size(); i++) {                mlist.add(list.getAd1().get(i).getImage());            }            //设置图片加载器            ((BannerViewHolder) holder).mbanner.setImageLoader(new GlideImageLoader());            ((BannerViewHolder) holder).mbanner.setImages(mlist);            ((BannerViewHolder) holder).mbanner.start();        } else if (holder instanceof PartTwoViewHolder) {            ((PartTwoViewHolder) holder).itemb_text1.setText(list.getAd5().get(0).getTitle());            ((PartTwoViewHolder) holder).itemb_text2.setText(list.getAd5().get(1).getTitle());            ((PartTwoViewHolder) holder).itemb_text3.setText(list.getAd5().get(2).getTitle());            ((PartTwoViewHolder) holder).itemb_text4.setText(list.getAd5().get(3).getTitle());            ((PartTwoViewHolder) holder).itemb_img1.setImageURI(list.getAd5().get(0).getImage());            ((PartTwoViewHolder) holder).itemb_img2.setImageURI(list.getAd5().get(1).getImage());            ((PartTwoViewHolder) holder).itemb_img3.setImageURI(list.getAd5().get(2).getImage());            ((PartTwoViewHolder) holder).itemb_img4.setImageURI(list.getAd5().get(3).getImage());        } else if (holder instanceof PartThreeViewHolder) {            ((PartThreeViewHolder) holder).text.setText("热门活动");            ((PartThreeViewHolder) holder).itemc_img1.setImageURI(list.getActivityInfo().getActivityInfoList().get(0).getActivityImg());            ((PartThreeViewHolder) holder).itemc_img2.setImageURI(list.getActivityInfo().getActivityInfoList().get(1).getActivityImg());        } else if (holder instanceof MyViewholder) {//            ((ViewHolderD) holder).text.setText(list.getDefaultGoodsList().get(position).getGoods_name() + "------样式4");            HomeAdapter2 h2=new HomeAdapter2();            ((MyViewholder)holder).myRecyclerView.setLayoutManager(new GridLayoutManager(context,2));            ((MyViewholder)holder).myRecyclerView.setAdapter(h2);        }        holder.itemView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                int pos = holder.getLayoutPosition();                mOnItemClickListener.onItemClick(pos,holder.itemView);            }        });    }    @Override    public int getItemCount() {        return 4;    }    //条目类型    @Override    public int getItemViewType(int position) {        if (position == 0) {            return Item_Type.Typeone.ordinal();        } else if (position == 1) {            return Item_Type.Typetwo.ordinal();        } else if (position == 2) {            return Item_Type.Typethree.ordinal();        }else if (position == 3) {            return Item_Type.Typefour.ordinal();        }        return -1;    }    class HomeAdapter2 extends RecyclerView.Adapter<HomeAdapter2.MyViewHolder>    {        @Override        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)        {            MyViewHolder holder = new MyViewHolder(LayoutInflater.from(                    context).inflate(R.layout.item_home, parent,                    false));            return holder;        }        @Override        public void onBindViewHolder(final MyViewHolder holder, int position)        {            holder.tv.setText(list.getDefaultGoodsList().get(position).getGoods_name());            String goodurl=list.getDefaultGoodsList().get(position).getGoods_img();            holder.img.setImageURI(goodurl);        }        @Override        public int getItemCount()        {            return list.getDefaultGoodsList().size();        }        class MyViewHolder extends RecyclerView.ViewHolder        {            TextView tv;            SimpleDraweeView img;            public MyViewHolder(View view)            {                super(view);                tv = (TextView) view.findViewById(R.id.id_text);                img= (SimpleDraweeView ) view.findViewById(R.id.id_image);            }        }    }
}根据自己的需要创建viewholder和布局文件
banner轮播图需要的
public class GlideImageLoader extends ImageLoader {    @Override    public void displayImage(Context context, Object path, ImageView imageView) {        Glide.with(context).load(path).into(imageView);    }}
封装好的retrofit请求数据工具类
添加拦截器
public class RetroFactory {    private RetroFactory() {    }
    private static OkHttpClient httpClient = new OkHttpClient.Builder()            .addInterceptor(new LoggingInterceptor()).connectTimeout(30, TimeUnit.SECONDS)            .readTimeout(30, TimeUnit.SECONDS)            .build();
    private static ApiService retrofitService = new Retrofit.Builder()            .baseUrl(API.TYPE_HOME)            .addConverterFactory(GsonConverterFactory.create())            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())            .build()
            .client(httpClient)            .create(ApiService.class);    //单列模式    public static ApiService getInstance() {        return retrofitService;    }}
主页面进行
public class HomeFragment extends Fragment implements iview {    private XRecyclerView xr;    private List<String> list = new ArrayList<>();    private HomeAdapter adapter;    MyPresenter mypresenter;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View v = inflater.inflate(R.layout.item_homefragment, container, false);        //初始化xr        xr = (XRecyclerView) v.findViewById(R.id.xre_xrv);        //加布局管理器        LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);        xr.setLayoutManager(layoutManager);        mypresenter = new MyPresenter(this);        mypresenter.getUrl(API.TYPE_HOME);        xr.setLoadingListener(new XRecyclerView.LoadingListener() {            @Override            public void onRefresh() {                mypresenter.getUrl(API.TYPE_HOME);                adapter.notifyDataSetChanged();                xr.refreshComplete();            }            @Override            public void onLoadMore() {                xr.refreshComplete();            }        });        return v;    }    @Override    public void getUser(HomeBean.DataBean lists) {        adapter = new HomeAdapter(lists, getActivity());        xr.setAdapter(adapter);        adapter.setOnItemClickListener(new onItemClickListener() {            @Override            public void onItemClick(int position, View itemView) {                Intent i = new Intent(getActivity(), ThingsActivity.class);                startActivity(i);            }        });    }}
 
原创粉丝点击