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>