Skip to content

Commit dcd248d

Browse files
committed
提交MultipleItemRvAdapter相关代码以及demo中添加其使用示例
1 parent c8e1c68 commit dcd248d

15 files changed

+605
-1
lines changed

app/src/main/AndroidManifest.xml

+2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
<activity android:name=".AnimationUseActivity" />
2323
<activity android:name=".HeaderAndFooterUseActivity" />
2424
<activity android:name=".SectionUseActivity" />
25+
<activity android:name=".ChooseMultipleItemUseTypeActivity" />
2526
<activity android:name=".MultipleItemUseActivity" />
27+
<activity android:name=".MultipleItemRvAdapterUseActivity" />
2628
<activity android:name=".EmptyViewUseActivity" />
2729
<activity android:name=".ItemDragAndSwipeUseActivity" />
2830
<activity android:name=".ExpandableUseActivity" />
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.chad.baserecyclerviewadapterhelper;
2+
3+
import android.content.Intent;
4+
import android.os.Bundle;
5+
import android.view.View;
6+
7+
import com.chad.baserecyclerviewadapterhelper.base.BaseActivity;
8+
9+
/**
10+
* https://github.com/chaychan
11+
* @author ChayChan
12+
* @description: ChooseMultipleItemUseType
13+
* @date 2018/3/30 10:14
14+
*/
15+
16+
public class ChooseMultipleItemUseTypeActivity extends BaseActivity {
17+
18+
@Override
19+
protected void onCreate(Bundle savedInstanceState) {
20+
super.onCreate(savedInstanceState);
21+
setContentView(R.layout.activity_choose_multiple_item_use_type);
22+
setTitle("MultipleItem Use");
23+
setBackBtn();
24+
25+
findViewById(R.id.card_view1).setOnClickListener(new View.OnClickListener() {
26+
@Override
27+
public void onClick(View v) {
28+
startActivity(new Intent(ChooseMultipleItemUseTypeActivity.this,MultipleItemUseActivity.class));
29+
}
30+
});
31+
32+
findViewById(R.id.card_view2).setOnClickListener(new View.OnClickListener() {
33+
@Override
34+
public void onClick(View v) {
35+
startActivity(new Intent(ChooseMultipleItemUseTypeActivity.this,MultipleItemRvAdapterUseActivity.class));
36+
}
37+
});
38+
}
39+
}

app/src/main/java/com/chad/baserecyclerviewadapterhelper/HomeActivity.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
* https://github.com/CymChad/BaseRecyclerViewAdapterHelper
1919
*/
2020
public class HomeActivity extends AppCompatActivity {
21-
private static final Class<?>[] ACTIVITY = {AnimationUseActivity.class, MultipleItemUseActivity.class, HeaderAndFooterUseActivity.class, PullToRefreshUseActivity.class, SectionUseActivity.class, EmptyViewUseActivity.class, ItemDragAndSwipeUseActivity.class, ItemClickActivity.class, ExpandableUseActivity.class, DataBindingUseActivity.class,UpFetchUseActivity.class};
21+
private static final Class<?>[] ACTIVITY = {AnimationUseActivity.class, ChooseMultipleItemUseTypeActivity.class, HeaderAndFooterUseActivity.class, PullToRefreshUseActivity.class, SectionUseActivity.class, EmptyViewUseActivity.class, ItemDragAndSwipeUseActivity.class, ItemClickActivity.class, ExpandableUseActivity.class, DataBindingUseActivity.class,UpFetchUseActivity.class};
2222
private static final String[] TITLE = {"Animation", "MultipleItem", "Header/Footer", "PullToRefresh", "Section", "EmptyView", "DragAndSwipe", "ItemClick", "ExpandableItem", "DataBinding", "UpFetchData"};
2323
private static final int[] IMG = {R.mipmap.gv_animation, R.mipmap.gv_multipleltem, R.mipmap.gv_header_and_footer, R.mipmap.gv_pulltorefresh, R.mipmap.gv_section, R.mipmap.gv_empty, R.mipmap.gv_drag_and_swipe, R.mipmap.gv_item_click, R.mipmap.gv_expandable, R.mipmap.gv_databinding,R.drawable.gv_up_fetch};
2424
private ArrayList<HomeItem> mDataList;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.chad.baserecyclerviewadapterhelper;
2+
3+
import android.os.Bundle;
4+
import android.support.v7.widget.GridLayoutManager;
5+
import android.support.v7.widget.RecyclerView;
6+
7+
import com.chad.baserecyclerviewadapterhelper.adapter.DemoMultipleItemRvAdapter;
8+
import com.chad.baserecyclerviewadapterhelper.base.BaseActivity;
9+
import com.chad.baserecyclerviewadapterhelper.data.DataServer;
10+
import com.chad.baserecyclerviewadapterhelper.entity.MultipleItem;
11+
import com.chad.baserecyclerviewadapterhelper.entity.NormalMultipleEntity;
12+
import com.chad.library.adapter.base.BaseQuickAdapter;
13+
14+
import java.util.List;
15+
16+
/**
17+
* https://github.com/chaychan
18+
*
19+
* @author ChayChan
20+
* @description: MultipleItemRvAdapter's usage
21+
* @date 2018/3/30 10:54
22+
*/
23+
24+
public class MultipleItemRvAdapterUseActivity extends BaseActivity {
25+
26+
private RecyclerView mRecyclerView;
27+
private List<NormalMultipleEntity> mData;
28+
29+
@Override
30+
protected void onCreate(Bundle savedInstanceState) {
31+
super.onCreate(savedInstanceState);
32+
setContentView(R.layout.activity_multiple_item_use);
33+
34+
setTitle("MultipleItemRvAdapter");
35+
setBackBtn();
36+
37+
mRecyclerView = (RecyclerView) findViewById(R.id.rv_list);
38+
GridLayoutManager manager = new GridLayoutManager(this, 4);
39+
mRecyclerView.setLayoutManager(manager);
40+
41+
mData = DataServer.getNormalMultipleEntities();
42+
DemoMultipleItemRvAdapter multipleItemAdapter = new DemoMultipleItemRvAdapter(mData);
43+
44+
multipleItemAdapter.setSpanSizeLookup(new BaseQuickAdapter.SpanSizeLookup() {
45+
@Override
46+
public int getSpanSize(GridLayoutManager gridLayoutManager, int position) {
47+
int type = mData.get(position).type;
48+
if (type == NormalMultipleEntity.SINGLE_TEXT){
49+
return MultipleItem.TEXT_SPAN_SIZE;
50+
}else if (type == NormalMultipleEntity.SINGLE_IMG){
51+
return MultipleItem.IMG_SPAN_SIZE;
52+
}else{
53+
return MultipleItem.IMG_TEXT_SPAN_SIZE;
54+
}
55+
}
56+
});
57+
58+
mRecyclerView.setAdapter(multipleItemAdapter);
59+
}
60+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.chad.baserecyclerviewadapterhelper.adapter;
2+
3+
import android.support.annotation.Nullable;
4+
5+
import com.chad.baserecyclerviewadapterhelper.adapter.provider.ImgItemProvider;
6+
import com.chad.baserecyclerviewadapterhelper.adapter.provider.TextImgItemProvider;
7+
import com.chad.baserecyclerviewadapterhelper.adapter.provider.TextItemProvider;
8+
import com.chad.baserecyclerviewadapterhelper.entity.NormalMultipleEntity;
9+
import com.chad.library.adapter.base.MultipleItemRvAdapter;
10+
11+
import java.util.List;
12+
13+
/**
14+
* https://github.com/chaychan
15+
* @author ChayChan
16+
* @description: MultipleItemRvAdapter demo
17+
* @date 2018/3/30 11:28
18+
*/
19+
20+
public class DemoMultipleItemRvAdapter extends MultipleItemRvAdapter<NormalMultipleEntity> {
21+
22+
public static final int TYPE_TEXT = 100;
23+
public static final int TYPE_IMG = 200;
24+
public static final int TYPE_TEXT_IMG = 300;
25+
26+
public DemoMultipleItemRvAdapter(@Nullable List<NormalMultipleEntity> data) {
27+
super(data);
28+
29+
//构造函数若有传其他参数可以在调用finishInitialize()之前进行赋值,赋值给全局变量
30+
//这样getViewType()和registerItemProvider()方法中可以获取到传过来的值
31+
//getViewType()中可能因为某些业务逻辑,需要将某个值传递过来进行判断,返回对应的viewType
32+
//registerItemProvider()中可以将值传递给ItemProvider
33+
34+
//If the constructor has other parameters, it needs to be assigned before calling finishInitialize() and assigned to the global variable
35+
// This getViewType () and registerItemProvider () method can get the value passed over
36+
// getViewType () may be due to some business logic, you need to pass a value to judge, return the corresponding viewType
37+
//RegisterItemProvider() can pass value to ItemProvider
38+
39+
finishInitialize();
40+
}
41+
42+
@Override
43+
protected int getViewType(NormalMultipleEntity entity) {
44+
//根据实体类判断并返回对应的viewType,具体判断逻辑因业务不同,这里这是简单通过判断type属性
45+
//According to the entity class to determine and return the corresponding viewType,
46+
//the specific judgment logic is different because of the business, here is simply by judging the type attribute
47+
if (entity.type == NormalMultipleEntity.SINGLE_TEXT){
48+
return TYPE_TEXT;
49+
}else if (entity.type == NormalMultipleEntity.SINGLE_IMG){
50+
return TYPE_IMG;
51+
}else if (entity.type == NormalMultipleEntity.TEXT_IMG){
52+
return TYPE_TEXT_IMG;
53+
}
54+
return 0;
55+
}
56+
57+
@Override
58+
public void registerItemProvider() {
59+
//注册相关的条目provider
60+
//Register related entries provider
61+
mProviderDelegate.registerProvider(new TextItemProvider());
62+
mProviderDelegate.registerProvider(new ImgItemProvider());
63+
mProviderDelegate.registerProvider(new TextImgItemProvider());
64+
}
65+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.chad.baserecyclerviewadapterhelper.adapter.provider;
2+
3+
import android.widget.Toast;
4+
5+
import com.chad.baserecyclerviewadapterhelper.R;
6+
import com.chad.baserecyclerviewadapterhelper.adapter.DemoMultipleItemRvAdapter;
7+
import com.chad.baserecyclerviewadapterhelper.entity.NormalMultipleEntity;
8+
import com.chad.library.adapter.base.BaseViewHolder;
9+
import com.chad.library.adapter.base.annotation.ItemProviderTag;
10+
import com.chad.library.adapter.base.provider.BaseItemProvider;
11+
12+
/**
13+
* https://github.com/chaychan
14+
*
15+
* @author ChayChan
16+
* @description: Img ItemProvider
17+
* @date 2018/3/30 11:39
18+
*/
19+
20+
@ItemProviderTag(
21+
viewType = DemoMultipleItemRvAdapter.TYPE_IMG,
22+
layout = R.layout.item_image_view
23+
)
24+
public class ImgItemProvider extends BaseItemProvider<NormalMultipleEntity> {
25+
26+
@Override
27+
public void convert(BaseViewHolder helper, NormalMultipleEntity data, int position) {
28+
if (position % 2 == 0) {
29+
helper.setImageResource(R.id.iv, R.mipmap.animation_img1);
30+
}else{
31+
helper.setImageResource(R.id.iv, R.mipmap.animation_img2);
32+
}
33+
}
34+
35+
@Override
36+
public void onClick(BaseViewHolder helper, NormalMultipleEntity data, int position) {
37+
Toast.makeText(mContext, "click", Toast.LENGTH_SHORT).show();
38+
}
39+
40+
@Override
41+
public boolean onLongClick(BaseViewHolder helper, NormalMultipleEntity data, int position) {
42+
Toast.makeText(mContext, "longClick", Toast.LENGTH_SHORT).show();
43+
return true;
44+
}
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.chad.baserecyclerviewadapterhelper.adapter.provider;
2+
3+
import android.widget.Toast;
4+
5+
import com.chad.baserecyclerviewadapterhelper.R;
6+
import com.chad.baserecyclerviewadapterhelper.adapter.DemoMultipleItemRvAdapter;
7+
import com.chad.baserecyclerviewadapterhelper.entity.NormalMultipleEntity;
8+
import com.chad.library.adapter.base.BaseViewHolder;
9+
import com.chad.library.adapter.base.annotation.ItemProviderTag;
10+
import com.chad.library.adapter.base.provider.BaseItemProvider;
11+
12+
/**
13+
* https://github.com/chaychan
14+
* @author ChayChan
15+
* @description: Text Img ItemProvider
16+
* @date 2018/3/30 11:39
17+
*/
18+
19+
@ItemProviderTag(
20+
viewType = DemoMultipleItemRvAdapter.TYPE_TEXT_IMG,
21+
layout = R.layout.item_img_text_view
22+
)
23+
public class TextImgItemProvider extends BaseItemProvider<NormalMultipleEntity> {
24+
25+
@Override
26+
public void convert(BaseViewHolder helper, NormalMultipleEntity data, int position) {
27+
helper.setText(R.id.tv, data.content);
28+
if (position % 2 == 0) {
29+
helper.setImageResource(R.id.iv, R.mipmap.animation_img1);
30+
}else{
31+
helper.setImageResource(R.id.iv, R.mipmap.animation_img2);
32+
}
33+
}
34+
35+
@Override
36+
public void onClick(BaseViewHolder helper, NormalMultipleEntity data, int position) {
37+
Toast.makeText(mContext, "click", Toast.LENGTH_SHORT).show();
38+
}
39+
40+
@Override
41+
public boolean onLongClick(BaseViewHolder helper, NormalMultipleEntity data, int position) {
42+
Toast.makeText(mContext, "longClick", Toast.LENGTH_SHORT).show();
43+
return true;
44+
}
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.chad.baserecyclerviewadapterhelper.adapter.provider;
2+
3+
import android.widget.Toast;
4+
5+
import com.chad.baserecyclerviewadapterhelper.R;
6+
import com.chad.baserecyclerviewadapterhelper.adapter.DemoMultipleItemRvAdapter;
7+
import com.chad.baserecyclerviewadapterhelper.entity.NormalMultipleEntity;
8+
import com.chad.library.adapter.base.BaseViewHolder;
9+
import com.chad.library.adapter.base.annotation.ItemProviderTag;
10+
import com.chad.library.adapter.base.provider.BaseItemProvider;
11+
12+
/**
13+
* https://github.com/chaychan
14+
* @author ChayChan
15+
* @description: Text ItemProvider
16+
* @date 2018/3/30 11:39
17+
*/
18+
19+
@ItemProviderTag(
20+
viewType = DemoMultipleItemRvAdapter.TYPE_TEXT,
21+
layout = R.layout.item_text_view
22+
)
23+
public class TextItemProvider extends BaseItemProvider<NormalMultipleEntity> {
24+
25+
@Override
26+
public void convert(BaseViewHolder helper, NormalMultipleEntity data, int position) {
27+
helper.setText(R.id.tv, data.content);
28+
}
29+
30+
@Override
31+
public void onClick(BaseViewHolder helper, NormalMultipleEntity data, int position) {
32+
Toast.makeText(mContext, "click", Toast.LENGTH_SHORT).show();
33+
}
34+
35+
@Override
36+
public boolean onLongClick(BaseViewHolder helper, NormalMultipleEntity data, int position) {
37+
Toast.makeText(mContext, "longClick", Toast.LENGTH_SHORT).show();
38+
return true;
39+
}
40+
}

app/src/main/java/com/chad/baserecyclerviewadapterhelper/data/DataServer.java

+14
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import com.chad.baserecyclerviewadapterhelper.entity.MultipleItem;
55
import com.chad.baserecyclerviewadapterhelper.entity.MySection;
6+
import com.chad.baserecyclerviewadapterhelper.entity.NormalMultipleEntity;
67
import com.chad.baserecyclerviewadapterhelper.entity.Status;
78
import com.chad.baserecyclerviewadapterhelper.entity.Video;
89

@@ -16,6 +17,7 @@ public class DataServer {
1617

1718
private static final String HTTPS_AVATARS1_GITHUBUSERCONTENT_COM_LINK = "https://avatars1.githubusercontent.com/u/7698209?v=3&s=460";
1819
private static final String CYM_CHAD = "CymChad";
20+
private static final String CHAY_CHAN = "ChayChan";
1921

2022
private DataServer() {
2123
}
@@ -96,6 +98,18 @@ public static List<MultipleItem> getMultipleItemData() {
9698
return list;
9799
}
98100

101+
public static List<NormalMultipleEntity> getNormalMultipleEntities() {
102+
List<NormalMultipleEntity> list = new ArrayList<>();
103+
for (int i = 0; i <= 4; i++) {
104+
list.add(new NormalMultipleEntity(NormalMultipleEntity.SINGLE_IMG));
105+
list.add(new NormalMultipleEntity(NormalMultipleEntity.SINGLE_TEXT,CHAY_CHAN));
106+
list.add(new NormalMultipleEntity(NormalMultipleEntity.TEXT_IMG,CHAY_CHAN));
107+
list.add(new NormalMultipleEntity(NormalMultipleEntity.TEXT_IMG,CYM_CHAD));
108+
list.add(new NormalMultipleEntity(NormalMultipleEntity.TEXT_IMG,CHAY_CHAN));
109+
}
110+
return list;
111+
}
112+
99113
// public static List<MultipleItem> getMultipleChildView() {
100114
// List<MultipleItem> list = new ArrayList<>();
101115
// for (int i = 0; i <= 4; i++) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.chad.baserecyclerviewadapterhelper.entity;
2+
3+
/**
4+
* https://github.com/chaychan
5+
*
6+
* @author ChayChan
7+
* @description: NormalEntity,need not implements MultiItemEntity interface
8+
* @date 2018/3/30 11:13
9+
*/
10+
11+
public class NormalMultipleEntity {
12+
13+
public static final int SINGLE_TEXT = 1;
14+
public static final int SINGLE_IMG = 2;
15+
public static final int TEXT_IMG = 3;
16+
17+
public int type;
18+
public String content;
19+
20+
public NormalMultipleEntity(int type) {
21+
this.type = type;
22+
}
23+
24+
public NormalMultipleEntity(int type, String content) {
25+
this.type = type;
26+
this.content = content;
27+
}
28+
}

0 commit comments

Comments
 (0)