XRecyclerView的上拉加载,下拉刷新
来源:互联网 发布:java类修饰符 编辑:程序博客网 时间:2024/06/05 20:24
添加所需要的依赖
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' compile 'com.github.bumptech.glide:glide:3.7.0' compile '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' compile 'com.jcodecraeer:xrecyclerview:1.3.2' //fresco的依赖 compile 'com.facebook.fresco:fresco:0.12.0' compile 'com.facebook.fresco:animated-base-support:0.12.0' //banner图的依赖 compile 'com.youth.banner:banner:1.4.9' //compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' compile 'com.github.bumptech.glide:glide:3.7.0' compile files('libs/universal-image-loader-1.9.3.jar')
IUserView中
public interface IUserView { void getUser(ArrayList<User.DataBean> list);}
IUserModel中
public interface IUserModel { void getJson(String url);}
UserModel中
public class UserModel implements IUserModel{ ArrayList<User.DataBean> list; String path; public UserModel(String path) { this.path = path; Log.d("1111111111111",path); } private OnFinish onFinish; public interface OnFinish{ void OnFinishListener(ArrayList<User.DataBean> list); } public void setOnFinish(OnFinish finish){ this.onFinish=finish; } @Override public void getJson(String url) { list = new ArrayList<>(); Retrofit retrofit = new Retrofit .Builder().baseUrl(url) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); ApiService apiService = retrofit.create(ApiService.class); Observable<List<User>> home = apiService.getHome(path); home.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<List<User>>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(List<User> users) { list = (ArrayList<User.DataBean>) users.get(0).getData(); onFinish.OnFinishListener(list); } }); }}
UsePresenter中
public class UsePresenter implements UserModel.OnFinish{ private IUserView userView; private UserModel userModel; public UsePresenter(IUserView userView,String url) { this.userView = userView; this.userModel=new UserModel(url); userModel.setOnFinish(this); } public void setNews(String url) { userModel.getJson(url); } @Override public void OnFinishListener(ArrayList<User.DataBean> list) { userView.getUser(list); }}
MainActivity
public class MainActivity extends AppCompatActivity implements IUserView{ private XRecyclerView recyclerView; private XRAdapter xrAdapter; int pager=1; String url; UsePresenter userPresenter; private ArrayList<User.DataBean> arrayList; private int count; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); arrayList=new ArrayList<User.DataBean>(); recyclerView= (XRecyclerView) findViewById(R.id.xre_xrv); url="txs/page_"+pager+".json"; userPresenter = new UsePresenter(this,url); userPresenter.setNews(Api.URLONE); } @Override public void getUser(ArrayList<User.DataBean> list) { if (pager==1){ Toast.makeText(MainActivity.this,"刷新",Toast.LENGTH_SHORT).show(); arrayList.clear(); } arrayList.addAll(list); xrAdapter = new XRAdapter(arrayList,MainActivity.this); recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this)); recyclerView.setAdapter(xrAdapter); recyclerView.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { count++; pager=1; userPresenter=new UsePresenter(MainActivity.this,url); userPresenter.setNews(Api.URLONE); xrAdapter.notifyDataSetChanged(); recyclerView.refreshComplete(); } @Override public void onLoadMore() { pager++; url="txs/page_"+pager+".json"; userPresenter=new UsePresenter(MainActivity.this,url); userPresenter.setNews(Api.URLONE); xrAdapter.notifyDataSetChanged(); recyclerView.loadMoreComplete(); } }); xrAdapter.setOnItemClickLitener(new OnItemClickLitener() { @Override public void onItemClick(View view, int position) { Toast.makeText(MainActivity.this,"点击了",Toast.LENGTH_SHORT).show(); } @Override public void onItemLongClick(View view, int position) { } }); }}
XRAdapter中
public class XRAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{ ArrayList<User.DataBean> list; Context mcontext; ArrayList mlist; //条目点击 private OnItemClickLitener mOnItemClickLitener; public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener) { this.mOnItemClickLitener = mOnItemClickLitener; } public XRAdapter(ArrayList<User.DataBean> list, Context mcontext) { this.list = list; this.mcontext = mcontext; } private enum Item_Type{ Typeone,Typetwo } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == Item_Type.Typeone.ordinal()) { View mView = LayoutInflater.from(mcontext).inflate(R.layout.recycle_item_a, null); ViewHolderA viewHolder = new ViewHolderA(mView); return viewHolder; } else if (viewType == Item_Type.Typetwo.ordinal()) { View mView1 = LayoutInflater.from(mcontext).inflate(R.layout.item_home, null); ViewHolderB viewHolder = new ViewHolderB(mView1); return viewHolder; } return null; } @Override public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { if (holder instanceof ViewHolderA) { mlist=new ArrayList(); for (int i=0;i<list.size();i++) { mlist.add(list.get(i).getImg()); } //设置图片加载器 ((ViewHolderA) holder).mbanner.setImageLoader(new GlideImageLoader()); ((ViewHolderA) holder).mbanner.setImages(mlist); ((ViewHolderA) holder).mbanner.start(); }else if(holder instanceof ViewHolderB) { final ViewHolderB holderB= (ViewHolderB) holder; holderB.te.setText(list.get(position).getTitle()); //得到图片的url Uri uri= Uri.parse(list.get(position).getImg()); holderB.draweeView.setImageURI(uri);//设置给Freso // 如果设置了回调,则设置点击事件 if (mOnItemClickLitener != null) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int pos = holder.getLayoutPosition(); mOnItemClickLitener.onItemClick(holder.itemView, pos); } }); holderB.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { int pos = holder.getLayoutPosition(); mOnItemClickLitener.onItemLongClick(holder.itemView, pos); return false; } }); } } } @Override public int getItemViewType(int position) { if (position==0) { return Item_Type.Typeone.ordinal(); }else{ return Item_Type.Typetwo.ordinal(); } } @Override public int getItemCount() { return list.size();//传对象需要得到 } class ViewHolderA extends RecyclerView.ViewHolder { public Banner mbanner; public ViewHolderA(View itemView) { super(itemView); mbanner = (Banner) itemView.findViewById(R.id.mybanner); } } class ViewHolderB extends RecyclerView.ViewHolder { //RecyclerView recyclerView; //ListView listView; TextView te; public SimpleDraweeView draweeView; public ViewHolderB(View itemView) { super(itemView); //recyclerView=(RecyclerView) itemView.findViewById(R.id.id_recyclerview); // listView=(ListView) itemView.findViewById(R.id.listview); te=(TextView) itemView.findViewById(R.id.it_text); draweeView=(SimpleDraweeView) itemView.findViewById(R.id.img); } }}
Api中
public class Api { public static final String URLONE = "http://mnews.gw.com.cn/wap/data/news/";}
ApiSrevice
public interface ApiService { @POST Observable<List<User>> getHome(@Url String url);}
GlideImageLoader
public class GlideImageLoader extends ImageLoader{ @Override public void displayImage(Context context, Object path, ImageView imageView) { Glide.with(context).load(path).into(imageView); }}
MyApp
public class MyApp extends Application{ @Override public void onCreate() { super.onCreate(); ImageLoaderConfiguration de=ImageLoaderConfiguration.createDefault(getApplicationContext()); ImageLoader.getInstance().init(de); Fresco.initialize(this); }}
OnItemClickLitener
public interface OnItemClickLitener { void onItemClick(View view, int position); void onItemLongClick(View view , int position);}
activity_main
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.bwie.yuekaomoni.MainActivity"> <com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/xre_xrv" android:layout_width="match_parent" android:layout_height="match_parent"> </com.jcodecraeer.xrecyclerview.XRecyclerView></RelativeLayout>
item_home
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:fresco="http://schemas.android.com/apk/res-auto" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/img" android:layout_margin="5dp" android:layout_width="100dp" android:layout_height="100dp" fresco:actualImageScaleType="focusCrop" fresco:placeholderImage="@mipmap/ic_launcher" fresco:placeholderImageScaleType="focusCrop" fresco:progressBarImage="@mipmap/ic_launcher" fresco:progressBarImageScaleType="focusCrop" fresco:progressBarAutoRotateInterval="5000" fresco:failureImage="@mipmap/ic_launcher" fresco:failureImageScaleType="focusCrop" fresco:retryImage="@mipmap/ic_launcher" fresco:retryImageScaleType="focusCrop" fresco:fadeDuration="5000" fresco:backgroundImage="@android:color/holo_orange_light" fresco:roundAsCircle="true" fresco:roundedCornerRadius="30dp" fresco:roundTopLeft="true" fresco:roundTopRight="true" fresco:roundBottomLeft="true" fresco:roundBottomRight="true" fresco:roundingBorderWidth="5dp" fresco:roundingBorderColor="#008dd7" /> <TextView android:id="@+id/it_text" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
recycle_item_a中
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <com.youth.banner.Banner android:id="@+id/mybanner" android:layout_width="match_parent" android:layout_height="150dp"> </com.youth.banner.Banner></LinearLayout>
阅读全文
0 0
- XRecyclerView的上拉加载,下拉刷新
- XRecyclerView下拉刷新和上拉加载
- XRecyclerView上拉刷新下拉加载
- XRecyclerView 上拉刷新、下拉加载
- XRecyclerView 上拉加载 下拉刷新
- XRecyclerView下拉刷新,上拉加载
- 使用XRecyclerview下拉刷新,上拉加载
- 支持下拉刷新上拉加载xrecyclerview的基本使用
- Xrecyclerview的使用(上拉刷新,下拉加载)
- XRecyclerView的下拉刷新上拉加载功能
- XRecyclerView的下拉刷新和上拉加载
- RecyclerView的上拉加载下拉刷新-xRecyclerView
- XRecyclerView+上拉加载下拉刷新+多条目加载
- XRecyclerView 实现下拉刷新和上拉加载更多
- xRecyclerView简单实现下拉刷新和上拉加载
- xRecyclerView简单实现下拉刷新和上拉加载
- Android XRecyclerView简单实现上拉刷新,下拉加载
- Mvp+OkHttp+XRecyclerView------上拉加载下拉刷新
- 网上获取图片Viewpager轮播
- 【转载】萌新也能懂的现代 JavaScript 开发
- C++学习之友元类
- Hadoop之常用命令
- Ubuntu 16.04出现:Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/
- XRecyclerView的上拉加载,下拉刷新
- 顺序查找 & 二分查找
- 休闲食品健康化,健康零食成为市场主力军
- 把.sql文件用cmd导入mysql
- webView
- 跟着实例学习ZooKeeper的用法: 缓存
- 支持向量机SVM(一)
- 透明度对应安卓16进制数字
- 学习Java多线程与并发编程后的笔记