《普通布局》:
1.依赖
//project(build.gradle)中配置:
allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" }
}
}
//module(build.gradle)中配置:
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'
implementation'com.android.support:recyclerview-v7:27.1.1'
2.xml
recyclerView
3.bean类
4.layout_item 外层布局高度一定是包裹自身
5.适配器
public class MyAdapter extends BaseQuickAdapter<Bean, BaseViewHolder> {
public MyAdapter(int layoutResId, @Nullable List<Bean> data) {
super(layoutResId, data);
}
@Override
protected void convert(BaseViewHolder helper, Bean item) {
helper.setText(R.id.mText, item.getText());
helper.setImageResource(R.id.mImg, item.getImg());
// 加载网络图片
//Glide.with(mContext).load(item.getImg()).crossFade().into((ImageView) helper.getView(R.id.mImg));
}
}
6.activity
//初始化数据:
for (int i = 0; i <10 ; i++) {
list.add(new Bean("111111111111111111",R.mipmap.ic_launcher));
}
//设置布局管理器 适配器
LinearLayoutManager manager = new LinearLayoutManager(this);
mRecy.setLayoutManager(manager);
MyAdapter myAdapter = new MyAdapter(R.layout.layout_bean_item, list);
mRecy.setAdapter(myAdapter);
//点击事件 长按 短按
myAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
}
});
myAdapter.setOnItemLongClickListener(new BaseQuickAdapter.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(BaseQuickAdapter adapter, View view, int position) {
return true;
}
});
《多布局》:
1。
public interface APIService {
@GET("test/duobuju2.txt")
Observable<DuoBean> getData();
}
2.实体类
//实体类必须实现MultiItemEntity,在设置数据的时候,需要给每一个数据设置itemType
public static class DataBean implements MultiItemEntity {
public static final int TEXT = 1;
public static final int IMG = 2;
private int itemType;
public DataBean(int itemType) {
this.itemType = itemType;
}
@Override
public int getItemType() {
//多布局判断可写在此位置
// if (thumbnail_pic_s!=null&&thumbnail_pic_s02==null&&thumbnail_pic_s03==null){
// return IMG1;
// }else if (thumbnail_pic_s!=null&&thumbnail_pic_s02!=null&&thumbnail_pic_s03==null){
// return IMG2;
// }else if (thumbnail_pic_s!=null&&thumbnail_pic_s02!=null&&thumbnail_pic_s03!=null){
// return IMG3;
// }
return itemType;
}
3.适配器
public class MyDuoAdapter extends BaseMultiItemQuickAdapter<DuoBean.DataBean, BaseViewHolder> {
/**
* Same as QuickAdapter#QuickAdapter(Context,int) but with
* some initialization data.
*
* @param data A new list is created out of this one to avoid mutable list
*/
public MyDuoAdapter(List<DuoBean.DataBean> data) {
super(data);
addItemType(DuoBean.DataBean.IMG1, R.layout.layout_duo_item1);
addItemType(DuoBean.DataBean.IMG2, R.layout.layout_duo_item2);
addItemType(DuoBean.DataBean.IMG3, R.layout.layout_duo_item3);
}
@Override
protected void convert(BaseViewHolder helper, DuoBean.DataBean item) {
switch (helper.getItemViewType()) {
case DuoBean.DataBean.IMG1:
helper.setText(R.id.mTitle1,item.getTitle());
Glide.with(mContext).load(item.getThumbnail_pic_s()).crossFade().into((ImageView) helper.getView(R.id.mImg1));
break;
case DuoBean.DataBean.IMG2:
helper.setText(R.id.mTitle2,item.getTitle());
Glide.with(mContext).load(item.getThumbnail_pic_s()).crossFade().into((ImageView) helper.getView(R.id.mImg21));
Glide.with(mContext).load(item.getThumbnail_pic_s02()).crossFade().into((ImageView) helper.getView(R.id.mImg22));
break;
case DuoBean.DataBean.IMG3:
helper.setText(R.id.mTitle3,item.getTitle());
Glide.with(mContext).load(item.getThumbnail_pic_s()).crossFade().into((ImageView) helper.getView(R.id.mImg31));
Glide.with(mContext).load(item.getThumbnail_pic_s02()).crossFade().into((ImageView) helper.getView(R.id.mImg32));
Glide.with(mContext).load(item.getThumbnail_pic_s03()).crossFade().into((ImageView) helper.getView(R.id.mImg33));
break;
}
}
}
4.代码
private RecyclerView mRecyclerView;
private List<DuoBean.DataBean> list=new ArrayList<>();
private MyDuoAdapter myDuoAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2_duo_item);
initView();
initData();
}
private void initData() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://172.16.54.17:8080/")
.addConverterFactory(GsonConverterFactory.create(new Gson()))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
retrofit.create(APIService.class)
.getData()
.subscribeOn(Schedulers.io())
// .repeat()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<DuoBean>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.d("Main2DuoItemActivity", "e:" + e);
}
@Override
public void onNext(DuoBean duoBean) {
List<DuoBean.DataBean> data = duoBean.getData();
for (int i = 0; i < data.size(); i++) {
DuoBean.DataBean dataBean = data.get(i);
//多布局 判断条目 而非图片数量
// switch (i%3){
// case 0:
// dataBean.setItemType(DuoBean.DataBean.IMG1);
// break;
// case 1:
// dataBean.setItemType(DuoBean.DataBean.IMG2);
// break;
// case 2:
// dataBean.setItemType(DuoBean.DataBean.IMG3);
// break;
// }
//方法一判断多布局
if(dataBean.getThumbnail_pic_s()!=null){
if(dataBean.getThumbnail_pic_s02()!=null){
if(dataBean.getThumbnail_pic_s03()!=null){
dataBean.setItemType(DuoBean.DataBean.IMG3);
continue;
}
dataBean.setItemType(DuoBean.DataBean.IMG2);
continue;
}
dataBean.setItemType(DuoBean.DataBean.IMG1);
}
//方法二判断多布局
// if (dataBean.getThumbnail_pic_s()!=null&&dataBean.getThumbnail_pic_s02()==null&&dataBean.getThumbnail_pic_s03()==null){
// dataBean.setItemType(DuoBean.DataBean.IMG1);
// }else if (dataBean.getThumbnail_pic_s()!=null&&dataBean.getThumbnail_pic_s02()!=null&&dataBean.getThumbnail_pic_s03()==null){
// dataBean.setItemType(DuoBean.DataBean.IMG2);
// }else if (dataBean.getThumbnail_pic_s()!=null&&dataBean.getThumbnail_pic_s02()!=null&&dataBean.getThumbnail_pic_s03()!=null){
// dataBean.setItemType(DuoBean.DataBean.IMG3);
// }
}
list.addAll(data);
Log.e("=================",list.toString());
myDuoAdapter.notifyDataSetChanged();
}
});
}
private void initView() {
mRecyclerView = (RecyclerView) findViewById(R.id.mRecyclerView);
LinearLayoutManager manager = new LinearLayoutManager(Main2DuoItemActivity.this);
mRecyclerView.setLayoutManager(manager);
myDuoAdapter = new MyDuoAdapter(list);
mRecyclerView.setAdapter(myDuoAdapter);
}
}
1.依赖
//project(build.gradle)中配置:
allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" }
}
}
//module(build.gradle)中配置:
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'
implementation'com.android.support:recyclerview-v7:27.1.1'
2.xml
recyclerView
3.bean类
4.layout_item 外层布局高度一定是包裹自身
5.适配器
public class MyAdapter extends BaseQuickAdapter<Bean, BaseViewHolder> {
public MyAdapter(int layoutResId, @Nullable List<Bean> data) {
super(layoutResId, data);
}
@Override
protected void convert(BaseViewHolder helper, Bean item) {
helper.setText(R.id.mText, item.getText());
helper.setImageResource(R.id.mImg, item.getImg());
// 加载网络图片
//Glide.with(mContext).load(item.getImg()).crossFade().into((ImageView) helper.getView(R.id.mImg));
}
}
6.activity
//初始化数据:
for (int i = 0; i <10 ; i++) {
list.add(new Bean("111111111111111111",R.mipmap.ic_launcher));
}
//设置布局管理器 适配器
LinearLayoutManager manager = new LinearLayoutManager(this);
mRecy.setLayoutManager(manager);
MyAdapter myAdapter = new MyAdapter(R.layout.layout_bean_item, list);
mRecy.setAdapter(myAdapter);
//点击事件 长按 短按
myAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
}
});
myAdapter.setOnItemLongClickListener(new BaseQuickAdapter.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(BaseQuickAdapter adapter, View view, int position) {
return true;
}
});
《多布局》:
1。
public interface APIService {
@GET("test/duobuju2.txt")
Observable<DuoBean> getData();
}
2.实体类
//实体类必须实现MultiItemEntity,在设置数据的时候,需要给每一个数据设置itemType
public static class DataBean implements MultiItemEntity {
public static final int TEXT = 1;
public static final int IMG = 2;
private int itemType;
public DataBean(int itemType) {
this.itemType = itemType;
}
@Override
public int getItemType() {
//多布局判断可写在此位置
// if (thumbnail_pic_s!=null&&thumbnail_pic_s02==null&&thumbnail_pic_s03==null){
// return IMG1;
// }else if (thumbnail_pic_s!=null&&thumbnail_pic_s02!=null&&thumbnail_pic_s03==null){
// return IMG2;
// }else if (thumbnail_pic_s!=null&&thumbnail_pic_s02!=null&&thumbnail_pic_s03!=null){
// return IMG3;
// }
return itemType;
}
3.适配器
public class MyDuoAdapter extends BaseMultiItemQuickAdapter<DuoBean.DataBean, BaseViewHolder> {
/**
* Same as QuickAdapter#QuickAdapter(Context,int) but with
* some initialization data.
*
* @param data A new list is created out of this one to avoid mutable list
*/
public MyDuoAdapter(List<DuoBean.DataBean> data) {
super(data);
addItemType(DuoBean.DataBean.IMG1, R.layout.layout_duo_item1);
addItemType(DuoBean.DataBean.IMG2, R.layout.layout_duo_item2);
addItemType(DuoBean.DataBean.IMG3, R.layout.layout_duo_item3);
}
@Override
protected void convert(BaseViewHolder helper, DuoBean.DataBean item) {
switch (helper.getItemViewType()) {
case DuoBean.DataBean.IMG1:
helper.setText(R.id.mTitle1,item.getTitle());
Glide.with(mContext).load(item.getThumbnail_pic_s()).crossFade().into((ImageView) helper.getView(R.id.mImg1));
break;
case DuoBean.DataBean.IMG2:
helper.setText(R.id.mTitle2,item.getTitle());
Glide.with(mContext).load(item.getThumbnail_pic_s()).crossFade().into((ImageView) helper.getView(R.id.mImg21));
Glide.with(mContext).load(item.getThumbnail_pic_s02()).crossFade().into((ImageView) helper.getView(R.id.mImg22));
break;
case DuoBean.DataBean.IMG3:
helper.setText(R.id.mTitle3,item.getTitle());
Glide.with(mContext).load(item.getThumbnail_pic_s()).crossFade().into((ImageView) helper.getView(R.id.mImg31));
Glide.with(mContext).load(item.getThumbnail_pic_s02()).crossFade().into((ImageView) helper.getView(R.id.mImg32));
Glide.with(mContext).load(item.getThumbnail_pic_s03()).crossFade().into((ImageView) helper.getView(R.id.mImg33));
break;
}
}
}
4.代码
private RecyclerView mRecyclerView;
private List<DuoBean.DataBean> list=new ArrayList<>();
private MyDuoAdapter myDuoAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2_duo_item);
initView();
initData();
}
private void initData() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://172.16.54.17:8080/")
.addConverterFactory(GsonConverterFactory.create(new Gson()))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
retrofit.create(APIService.class)
.getData()
.subscribeOn(Schedulers.io())
// .repeat()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<DuoBean>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.d("Main2DuoItemActivity", "e:" + e);
}
@Override
public void onNext(DuoBean duoBean) {
List<DuoBean.DataBean> data = duoBean.getData();
for (int i = 0; i < data.size(); i++) {
DuoBean.DataBean dataBean = data.get(i);
//多布局 判断条目 而非图片数量
// switch (i%3){
// case 0:
// dataBean.setItemType(DuoBean.DataBean.IMG1);
// break;
// case 1:
// dataBean.setItemType(DuoBean.DataBean.IMG2);
// break;
// case 2:
// dataBean.setItemType(DuoBean.DataBean.IMG3);
// break;
// }
//方法一判断多布局
if(dataBean.getThumbnail_pic_s()!=null){
if(dataBean.getThumbnail_pic_s02()!=null){
if(dataBean.getThumbnail_pic_s03()!=null){
dataBean.setItemType(DuoBean.DataBean.IMG3);
continue;
}
dataBean.setItemType(DuoBean.DataBean.IMG2);
continue;
}
dataBean.setItemType(DuoBean.DataBean.IMG1);
}
//方法二判断多布局
// if (dataBean.getThumbnail_pic_s()!=null&&dataBean.getThumbnail_pic_s02()==null&&dataBean.getThumbnail_pic_s03()==null){
// dataBean.setItemType(DuoBean.DataBean.IMG1);
// }else if (dataBean.getThumbnail_pic_s()!=null&&dataBean.getThumbnail_pic_s02()!=null&&dataBean.getThumbnail_pic_s03()==null){
// dataBean.setItemType(DuoBean.DataBean.IMG2);
// }else if (dataBean.getThumbnail_pic_s()!=null&&dataBean.getThumbnail_pic_s02()!=null&&dataBean.getThumbnail_pic_s03()!=null){
// dataBean.setItemType(DuoBean.DataBean.IMG3);
// }
}
list.addAll(data);
Log.e("=================",list.toString());
myDuoAdapter.notifyDataSetChanged();
}
});
}
private void initView() {
mRecyclerView = (RecyclerView) findViewById(R.id.mRecyclerView);
LinearLayoutManager manager = new LinearLayoutManager(Main2DuoItemActivity.this);
mRecyclerView.setLayoutManager(manager);
myDuoAdapter = new MyDuoAdapter(list);
mRecyclerView.setAdapter(myDuoAdapter);
}
}