retrofit+RXJava+banner+recyclerView 实现轮播图效果与数据请求显示

 

 

依赖

    implementation 'io.reactivex:rxandroid:1.2.1'
    implementation 'io.reactivex:rxjava:1.1.6'

    implementation 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
    implementation 'com.squareup.retrofit2:adapter-rxjava:2.0.1'

    implementation 'com.facebook.fresco:fresco:0.14.1'

    implementation 'com.android.support:recyclerview-v7:27.1.1'
    implementation 'com.jcodecraeer:xrecyclerview:1.2.0'

    implementation 'com.youth.banner:banner:1.4.10'

权限

    <!-- if you want to load images from the internet -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- if you want to load images from a file OR from the internet -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

接口

public interface MyServiceInterface {

    @GET("banner/json")
    Observable<BanBean> getBanBean();

    @GET("article/list/{num}/json")
    Observable<ListBean> getListBean(@Path("num") int num);
}
public class FrescoImageLoader extends ImageLoader {
    @Override
    public void displayImage(Context context, Object path, ImageView imageView) {
        Uri uri = Uri.parse((String) path);
        imageView.setImageURI(uri);
    }
    public ImageView createImageView(Context context){
        SimpleDraweeView sdv = new SimpleDraweeView(context);
        return sdv;
    }
}

lunboModel

public class BanModel {
    private List<BanBean.DataBean> mList;
    OnFinish mFinish;

    public BanModel(OnFinish finish) {
        mFinish = finish;
    }

    public void getData(){
        mList = new ArrayList<>();
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(NetUrl.URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();

        MyServiceInterface myServiceInterface = retrofit.create(MyServiceInterface.class);
        Observable<BanBean> banBean = myServiceInterface.getBanBean();

        banBean.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<BanBean>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(BanBean banBean) {
                        List<BanBean.DataBean> data = banBean.getData();
                        mFinish.OnFinishListener(data);
                    }
                });


    }


    public interface OnFinish{
        void OnFinishListener(List<BanBean.DataBean> list);
    }
}

轮播view

public interface IView {
    void showData(List<String> stringList);
}

轮播presenter

public class BanPresenter implements BanModel.OnFinish {
    private BanModel mModle;
    private IView mView;

    public BanPresenter(IView view) {
        mView = view;
        mModle = new BanModel(this);
    }

    public void getData(){
        mModle.getData();
    }

    @Override
    public void OnFinishListener(List<BanBean.DataBean> list) {
        List<String> stringList = new ArrayList<>();
        for (BanBean.DataBean bean: list) {
            stringList.add(bean.getImagePath());
        }
        mView.showData(stringList);
    }
}

activity

public class MainActivity extends AppCompatActivity implements IView, IListView {

    private RecyclerView rlv;
    private RlvAdapter adapter;
    private BanPresenter mBanPresenter = new BanPresenter(this);
    private ListPresenter mListPresenter = new ListPresenter(this);
    private int num = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        
        adapter = new RlvAdapter(this);
        rlv.setAdapter(adapter);
        LinearLayoutManager manager = new LinearLayoutManager(this);
        rlv.setLayoutManager(manager);
    }

    private void initView() {
        rlv = (RecyclerView) findViewById(R.id.rlv);
        mBanPresenter.getData();
        mListPresenter.getListData(num);

    }

    @Override
    public void showData(List<String> stringList) {
        adapter.setBanList(stringList);
    }

    @Override
    public void showListData(List<ListBean.DataBean.DatasBean> list) {
        adapter.setMlist(list);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mBanPresenter != null){
            mBanPresenter = null;
        }
        if (mListPresenter != null){
            mListPresenter = null;
        }
    }
}

adapter

public class RlvAdapter extends RecyclerView.Adapter {
    private List<String>  mBanList;
    private List<ListBean.DataBean.DatasBean> mList;
    private Context mContext;

    public RlvAdapter(Context context) {
        mContext = context;
        mBanList = new ArrayList<>();
        mList = new ArrayList<>();
    }

    public void setBanList(List<String> banList) {
        mBanList.clear();
        mBanList.addAll(banList);
        notifyDataSetChanged();
    }

    public void setMlist(List<ListBean.DataBean.DatasBean> list) {
        mList.clear();
        mList.addAll(list);
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = null;
        switch (viewType){

            case 0:
                view = View.inflate(mContext, R.layout.banner_layout,null);
                BannerViewHolder banHolder = new BannerViewHolder(view);
                return banHolder;
            case 1:
                view = View.inflate(mContext, R.layout.list_layout,null);
                ListViewHolder listHolder = new ListViewHolder(view);
                return listHolder;
        }
        return null;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        switch (position){
            case 0:
                BannerViewHolder banHolder = (BannerViewHolder) holder;
                banHolder.banner_item.setImageLoader(new FrescoImageLoader()).setImages(mBanList).start();
                break;
            case 1:
                ListViewHolder listHolder = (ListViewHolder) holder;

                break;
        }
    }

    @Override
    public int getItemCount() {
        return 2;
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }

    class BannerViewHolder extends RecyclerView.ViewHolder {
        Banner banner_item;
        public BannerViewHolder(View itemView) {
            super(itemView);
            banner_item = itemView.findViewById(R.id.banner_item);
        }
    }

    class ListViewHolder extends RecyclerView.ViewHolder {
        XRecyclerView xrlv;
        public ListViewHolder(View itemView) {
            super(itemView);
            xrlv = itemView.findViewById(R.id.xrlv);
            LinearLayoutManager manager = new LinearLayoutManager(mContext);
            xrlv.setLayoutManager(manager);
            ListAdapter adapter = new ListAdapter(mList,mContext);
            xrlv.setAdapter(adapter);
        }
    }
}

list数据model

public class ListModel {
    private List<ListBean.DataBean> mList;
    OnFinish mFinish;

    public ListModel(OnFinish finish) {
        mFinish = finish;
    }

    public void getData(int num){
        mList = new ArrayList<>();
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(NetUrl.URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();

        MyServiceInterface myServiceInterface = retrofit.create(MyServiceInterface.class);
        Observable<ListBean> listBean = myServiceInterface.getListBean(num);

        listBean.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<ListBean>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(ListBean listBean) {
                        List<ListBean.DataBean.DatasBean> datas = listBean.getData().getDatas();
                        mFinish.OnFinishListener(datas);
                    }
                });
    }


    public interface OnFinish{
        void OnFinishListener(List<ListBean.DataBean.DatasBean> list);
    }
}

数据View

public interface IListView {
    void showListData(List<ListBean.DataBean.DatasBean> list);
}

数据presenter

public class ListPresenter implements ListModel.OnFinish {
    private ListModel mModle;
    private IListView mView;

    public ListPresenter(IListView view) {
        mView = view;
        mModle = new ListModel(this);
    }

    public void getListData(int num){
        mModle.getData(num);
    }

    @Override
    public void OnFinishListener(List<ListBean.DataBean.DatasBean> list) {
        mView.showListData(list);
    }
}

adapter

public class ListAdapter extends XRecyclerView.Adapter {
    private List<ListBean.DataBean.DatasBean> mList;
    private Context mContext;

    public ListAdapter(List<ListBean.DataBean.DatasBean> list, Context context) {
        mList = list;
        mContext = context;
    }

    public void setList(List<ListBean.DataBean.DatasBean> list , int num) {
        if (num == 1){
            mList.clear();
        }
        mList.addAll(list);
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = View.inflate(parent.getContext(), R.layout.item_news,null);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        ViewHolder holder1 = (ViewHolder) holder;
        holder1.text_superChapterName.setText(mList.get(position).getSuperChapterName());
        holder1.text_title.setText(mList.get(position).getTitle());
    }

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

    public class ViewHolder extends XRecyclerView.ViewHolder {
        TextView text_title,text_superChapterName;
        public ViewHolder(View itemView) {
            super(itemView);
            text_title = itemView.findViewById(R.id.text_title);
            text_superChapterName = itemView.findViewById(R.id.text_superChapterName);
        }
    }
}

布局是recyclerView多条目加载

<android.support.v7.widget.RecyclerView
        android:id="@+id/rlv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
<com.youth.banner.Banner
        android:id="@+id/banner_item"
        android:layout_width="match_parent"
        android:layout_height="250dp"></com.youth.banner.Banner>
<com.jcodecraeer.xrecyclerview.XRecyclerView
        android:id="@+id/xrlv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></com.jcodecraeer.xrecyclerview.XRecyclerView>
<LinearLayout
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/text_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp"/>
    <TextView
        android:id="@+id/text_superChapterName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="#047af9"
        android:textSize="25sp"/>
</LinearLayout>

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值