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); } }); }}
阅读全文
0 0
- XRecyclerView 多条目加载
- XRecyclerView多条目加载
- xRecyclerView的刷新,加载更多,多条目
- Android XRecyclerView(多条目加载实现)
- MVP实现xRecyclerview多条目加载
- XRecyclerView+上拉加载下拉刷新+多条目加载
- xrecyclerview多条目布局
- XRecyclerView的多条目加载(banner+列表)
- RecyclerView 条目点击事件 XRecyclerView刷新加载
- XRecyclerView的多条目请求数据,可以实现上拉加载下拉刷新
- mvp+retrofit+rxjava xrecyclerview实现多条目 下拉刷新 下拉加载 点击跳转
- xrecyclerview实现两种多条目
- MVP泛型+xRecyclerView+Retrofit+OkHttp+RxJava多条目,横向
- ListView多条目加载
- ListView 多条目加载
- listview多条目加载
- ListView多条目加载
- listview多条目加载
- 立个flag
- 部署Django项目
- idea导入struts2架包
- 自定义View练习2
- input type=radio ios点击后黑色背景的解决
- XRecyclerView 多条目加载
- ObjectARX反应器概述
- 提升自旋锁spinlock的性能-pause指令
- Struts2学习(二)【Struts2访问流程】
- css 文字超出部分使用...代替
- 在阿里云服务器上安装配置svn
- easyBCD修改系统启动项
- JQ工作整理笔记(1)
- C++中static_cast, dynamic_cast, const_cast用法/使用情况及区别解析