依赖
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>