activity_main
<android.support.v7.widget.RecyclerView
android:id="@+id/recy"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.constraint.ConstraintLayout>
多条目布局省略
Adapter
package com.recyclerview_more_base.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import com.recyclerview_more_base.News;
import com.recyclerview_more_base.R;
import com.recyclerview_more_base.adapter.TypeAbstractAdapter;
import com.recyclerview_more_base.adapter.TypeOneAdapter;
import com.recyclerview_more_base.adapter.TypeThreeAdapter;
import com.recyclerview_more_base.adapter.TypeTwoAdapter;
import java.util.ArrayList;
import java.util.List;
public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private List<News.DataBean> list;
private static final int TYPE_ONE = 0;
private static final int TYPE_TWO = 1;
private static final int TYPE_THREE = 2;
private View view;
public NewsAdapter(Context context) {
this.context = context;
list = new ArrayList<>();
}
public void setData(List<News.DataBean> dataBeans) {
list.clear();
if (dataBeans != null) {
list.addAll(dataBeans);
}
notifyDataSetChanged();
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
if (i == TYPE_ONE) {
view = View.inflate(context, R.layout.movies_item1, null);
return new TypeOneAdapter(view);
} else if (i == TYPE_TWO) {
view = View.inflate(context, R.layout.movies_item2, null);
return new TypeTwoAdapter(view);
} else {
view = View.inflate(context, R.layout.movies_item3, null);
return new TypeThreeAdapter(view);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
((TypeAbstractAdapter) viewHolder).onBindHolder(list.get(i));
}
@Override
public int getItemCount() {
return list.size();
}
@Override
public int getItemViewType(int position) {
News.DataBean dataBean = list.get(position);
if (!TextUtils.isEmpty(dataBean.getThumbnail_pic_s())) {
return TYPE_THREE;
} else if (!TextUtils.isEmpty(dataBean.getThumbnail_pic_s02())) {
return TYPE_TWO;
} else {
return TYPE_ONE;
}
}
}
TypeAbstractAdapter
public abstract class TypeAbstractAdapter extends RecyclerView.ViewHolder {
public TypeAbstractAdapter(@NonNull View itemView) {
super(itemView);
}
public abstract void onBindHolder(News.DataBean news);
}
TypeOneAdapter
public class TypeOneAdapter extends TypeAbstractAdapter {
private final SimpleDraweeView simplImage;
private final TextView title;
public TypeOneAdapter(@NonNull View itemView) {
super(itemView);
simplImage = itemView.findViewById(R.id.simpl_image);
title = itemView.findViewById(R.id.title);
}
@Override
public void onBindHolder(News.DataBean news) {
simplImage.setImageURI(news.getThumbnail_pic_s());
title.setText(news.getTitle());
}
}
TypeTwoAdapter
public class TypeTwoAdapter extends TypeAbstractAdapter {
private final SimpleDraweeView simplImage1;
private final SimpleDraweeView simplImage2;
private final TextView title;
public TypeTwoAdapter(@NonNull View itemView) {
super(itemView);
simplImage1 = itemView.findViewById(R.id.simpl_image1);
simplImage2 = itemView.findViewById(R.id.simpl_image2);
title = itemView.findViewById(R.id.title);
}
@Override
public void onBindHolder(News.DataBean news) {
simplImage1.setImageURI(news.getThumbnail_pic_s());
simplImage2.setImageURI(news.getThumbnail_pic_s02());
title.setText(news.getTitle());
}
}
TypeThreeAdapter
public class TypeThreeAdapter extends TypeAbstractAdapter {
private final SimpleDraweeView simplImage1;
private final SimpleDraweeView simplImage2;
private final SimpleDraweeView simplImage3;
private final TextView title;
public TypeThreeAdapter(@NonNull View itemView) {
super(itemView);
simplImage1 = itemView.findViewById(R.id.simpl_image1);
simplImage2 = itemView.findViewById(R.id.simpl_image2);
simplImage3 = itemView.findViewById(R.id.simpl_image3);
title = itemView.findViewById(R.id.title);
}
@Override
public void onBindHolder(News.DataBean news) {
simplImage1.setImageURI(news.getThumbnail_pic_s());
simplImage2.setImageURI(news.getThumbnail_pic_s02());
simplImage3.setImageURI(news.getThumbnail_pic_s03());
title.setText(news.getTitle());
}
}
MainActivity
package com.recyclerview_more_base;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import com.recyclerview_more_base.adapter.NewsAdapter;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
public class MainActivity extends AppCompatActivity {
@BindView(R.id.recy)
RecyclerView recy;
private NewsAdapter newsAdapter;
private String url="http://www.xieast.com/api/news/news.php?type=top&page=1";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//适配器、布局管理器
newsAdapter = new NewsAdapter(this);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recy.setLayoutManager(linearLayoutManager);
recy.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
recy.setAdapter(newsAdapter);
initData();
}
private void initData() {
NewsPresenter newsPresenter = new NewsPresenter();
newsPresenter.NewsData(url);
newsPresenter.setNewsInterface(new NewsPresenter.NewsInterface() {
@Override
public void failed(Exception e) {
}
@Override
public void success(List<News.DataBean> dataBeans) {
newsAdapter.setData(dataBeans);
}
});
}
}
NewsPresenter
public class NewsPresenter {
public void NewsData(String url){
HttpUtils.getInstance().doGet(url, new HttpUtils.HttpUtilsInterface() {
@Override
public void failed(Exception e) {
mNewsInterface.failed(e);
}
@Override
public void success(String data) {
News news = new Gson().fromJson(data, News.class);
List<News.DataBean> newsData = news.getData();
mNewsInterface.success(newsData);
}
});
}
//创建接口
public interface NewsInterface{
void failed(Exception e);
void success(List<News.DataBean> newsData);
}
private NewsInterface mNewsInterface;
public void setNewsInterface(NewsInterface newsInterface){
mNewsInterface=newsInterface;
}
}
MyApplication
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
依赖
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.facebook.fresco:fresco:1.11.0'
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
implementation 'com.squareup.okhttp3:okhttp:3.12.0'