diff --git a/.travis.yml b/.travis.yml index c8908aab0..abf269e44 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,21 +3,18 @@ jdk: oraclejdk8 sudo: false android: - components: +components: - tools - - build-tools-26.0.2 - - android-26 + - platform-tools + - build-tools-27.0.2 + - android-27 - extra-android-m2repository - extra-android-support - licenses: - - android-sdk-license-.+ - - '.+' - before_install: - chmod +x gradlew - mkdir "$ANDROID_HOME/licenses" || true - - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" - - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license" + # Hack to accept Android licenses + - yes | sdkmanager "platforms;android-27" script: - ./gradlew assembleRelease diff --git a/README.md b/README.md index 2d210c794..a3c654464 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ ![](https://user-images.githubusercontent.com/7698209/33198075-ef8f2230-d123-11e7-85a3-4cb9b22f877d.png) -[![](https://jitpack.io/v/CymChad/BaseRecyclerViewAdapterHelper.svg)](https://jitpack.io/#CymChad/BaseRecyclerViewAdapterHelper)![](https://travis-ci.org/CymChad/BaseRecyclerViewAdapterHelper.svg?branch=master)[![API](https://img.shields.io/badge/API-14%2B-brightgreen.svg?style=flat)](https://android-arsenal.com/api?level=14)[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-BaseRecyclerViewAdapterHelper-green.svg?style=true)](https://android-arsenal.com/details/1/3644)[![CircleCI](https://circleci.com/gh/CymChad/BaseRecyclerViewAdapterHelper/tree/master.svg?style=svg)](https://circleci.com/gh/CymChad/BaseRecyclerViewAdapterHelper/tree/master)[![Codacy Badge](https://api.codacy.com/project/badge/Grade/2302d0084d0048eaa0f9bac4350837a0)](https://www.codacy.com/app/CymChad/BaseRecyclerViewAdapterHelper?utm_source=github.com&utm_medium=referral&utm_content=CymChad/BaseRecyclerViewAdapterHelper&utm_campaign=Badge_Grade)[![](https://img.shields.io/badge/%E4%BD%9C%E8%80%85-%E9%99%88%E5%AE%87%E6%98%8E-7AD6FD.svg)](http://www.jianshu.com/u/f958e66439f0) +[![](https://jitpack.io/v/CymChad/BaseRecyclerViewAdapterHelper.svg)](https://jitpack.io/#CymChad/BaseRecyclerViewAdapterHelper)![](https://travis-ci.org/CymChad/BaseRecyclerViewAdapterHelper.svg?branch=master)[![API](https://img.shields.io/badge/API-14%2B-brightgreen.svg?style=flat)](https://android-arsenal.com/api?level=14)[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-BaseRecyclerViewAdapterHelper-green.svg?style=true)](https://android-arsenal.com/details/1/3644)[![CircleCI](https://circleci.com/gh/CymChad/BaseRecyclerViewAdapterHelper/tree/master.svg?style=svg)](https://circleci.com/gh/CymChad/BaseRecyclerViewAdapterHelper/tree/master)[![Codacy Badge](https://api.codacy.com/project/badge/Grade/2302d0084d0048eaa0f9bac4350837a0)](https://www.codacy.com/app/CymChad/BaseRecyclerViewAdapterHelper?utm_source=github.com&utm_medium=referral&utm_content=CymChad/BaseRecyclerViewAdapterHelper&utm_campaign=Badge_Grade)[![](https://img.shields.io/badge/%E4%BD%9C%E8%80%85-%E9%99%88%E5%AE%87%E6%98%8E-7AD6FD.svg)](https://www.zhihu.com/people/chen-yu-ming-98/activities) # BRVAH http://www.recyclerview.org/ Powerful and flexible RecyclerAdapter, @@ -8,7 +8,7 @@ Please feel free to use this. (Welcome to **Star** and **Fork**) kotlin demo :[BRVAH_kotlin](https://github.com/AllenCoder/BRVAH_kotlin) # Document - [English](https://github.com/CymChad/BaseRecyclerViewAdapterHelper/wiki) -- [中文](http://www.jianshu.com/p/b343fcff51b0) +- [中文](http://www.jianshu.com/p/b343fcff51b0) ## [UI](https://github.com/CymChad/BaseRecyclerViewAdapterHelper/issues/694) ## Demo @@ -53,5 +53,3 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ``` -# 推荐 -![](https://user-images.githubusercontent.com/7698209/33198309-4908849a-d125-11e7-80eb-a80c64d61c77.jpeg) diff --git a/app/build.gradle b/app/build.gradle index 9742eebdd..1b12b7606 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 26 + compileSdkVersion 27 defaultConfig { applicationId "com.chad.baserecyclerviewadapterhelper" minSdkVersion 14 - targetSdkVersion 26 + targetSdkVersion 27 versionCode 5 versionName "2.1" } @@ -28,9 +28,9 @@ dependencies { implementation project(path: ':library') implementation project(':material-spinner-1.0.5') implementation 'com.github.bumptech.glide:glide:3.7.0' - implementation 'com.android.support:design:26.1.0' - implementation 'com.android.support:cardview-v7:26.1.0' - implementation 'com.android.support:appcompat-v7:26.1.0' + implementation 'com.android.support:design:27.1.1' + implementation 'com.android.support:cardview-v7:27.1.1' + implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.kyleduo.switchbutton:library:2.0.0' implementation 'com.orhanobut:logger:2.1.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b429d8241..9a9b1a294 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -22,7 +22,9 @@ + + @@ -33,6 +35,7 @@ android:name=".HomeActivity" android:launchMode="singleTask"> + \ No newline at end of file diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ChooseMultipleItemUseTypeActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ChooseMultipleItemUseTypeActivity.java new file mode 100644 index 000000000..bfa232ebe --- /dev/null +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ChooseMultipleItemUseTypeActivity.java @@ -0,0 +1,39 @@ +package com.chad.baserecyclerviewadapterhelper; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; + +import com.chad.baserecyclerviewadapterhelper.base.BaseActivity; + +/** + * https://github.com/chaychan + * @author ChayChan + * @description: ChooseMultipleItemUseType + * @date 2018/3/30 10:14 + */ + +public class ChooseMultipleItemUseTypeActivity extends BaseActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_choose_multiple_item_use_type); + setTitle("MultipleItem Use"); + setBackBtn(); + + findViewById(R.id.card_view1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(new Intent(ChooseMultipleItemUseTypeActivity.this,MultipleItemUseActivity.class)); + } + }); + + findViewById(R.id.card_view2).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(new Intent(ChooseMultipleItemUseTypeActivity.this,MultipleItemRvAdapterUseActivity.class)); + } + }); + } +} diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/HomeActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/HomeActivity.java index 1cfaa02a4..5e8f58d0a 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/HomeActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/HomeActivity.java @@ -18,9 +18,9 @@ * https://github.com/CymChad/BaseRecyclerViewAdapterHelper */ public class HomeActivity extends AppCompatActivity { - 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}; - private static final String[] TITLE = {"Animation", "MultipleItem", "Header/Footer", "PullToRefresh", "Section", "EmptyView", "DragAndSwipe", "ItemClick", "ExpandableItem", "DataBinding", "UpFetchData"}; - 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}; + 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,SectionMultipleItemUseActivity.class}; + private static final String[] TITLE = {"Animation", "MultipleItem", "Header/Footer", "PullToRefresh", "Section", "EmptyView", "DragAndSwipe", "ItemClick", "ExpandableItem", "DataBinding", "UpFetchData", "SectionMultipleItem"}; + 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, R.mipmap.gv_multipleltem}; private ArrayList mDataList; private RecyclerView mRecyclerView; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemRvAdapterUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemRvAdapterUseActivity.java new file mode 100644 index 000000000..099522b98 --- /dev/null +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemRvAdapterUseActivity.java @@ -0,0 +1,97 @@ +package com.chad.baserecyclerviewadapterhelper; + +import android.os.Bundle; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.View; +import android.widget.Toast; + +import com.chad.baserecyclerviewadapterhelper.adapter.DemoMultipleItemRvAdapter; +import com.chad.baserecyclerviewadapterhelper.base.BaseActivity; +import com.chad.baserecyclerviewadapterhelper.data.DataServer; +import com.chad.baserecyclerviewadapterhelper.entity.MultipleItem; +import com.chad.baserecyclerviewadapterhelper.entity.NormalMultipleEntity; +import com.chad.library.adapter.base.BaseQuickAdapter; + +import java.util.List; + +/** + * + * @author ChayChan + * @description: MultipleItemRvAdapter's usage + * @date 2018/3/30 10:54 + */ + +public class MultipleItemRvAdapterUseActivity extends BaseActivity { + + private List mData; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_multiple_item_use); + + setTitle("MultipleItemRvAdapter"); + setBackBtn(); + + RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.rv_list); + GridLayoutManager manager = new GridLayoutManager(this, 4); + mRecyclerView.setLayoutManager(manager); + + mData = DataServer.getNormalMultipleEntities(); + DemoMultipleItemRvAdapter multipleItemAdapter = new DemoMultipleItemRvAdapter(mData); + + multipleItemAdapter.setSpanSizeLookup(new BaseQuickAdapter.SpanSizeLookup() { + @Override + public int getSpanSize(GridLayoutManager gridLayoutManager, int position) { + int type = mData.get(position).type; + if (type == NormalMultipleEntity.SINGLE_TEXT) { + return MultipleItem.TEXT_SPAN_SIZE; + } else if (type == NormalMultipleEntity.SINGLE_IMG) { + return MultipleItem.IMG_SPAN_SIZE; + } else { + return MultipleItem.IMG_TEXT_SPAN_SIZE; + } + } + }); + +/** + * The click event is distributed to the BaseItemProvider and can be overridden. + * if you need register itemchild click longClick + * you need to use https://github.com/CymChad/BaseRecyclerViewAdapterHelper/wiki/Add-OnItemClickLister#use-it-item-child-long-click + */ + /* @Override + protected void convert(BaseViewHolder helper, Status item) { + helper.setText(R.id.tweetName, item.getUserName()) + .setText(R.id.tweetText, item.getText()) + .setText(R.id.tweetDate, item.getCreatedAt()) + .setVisible(R.id.tweetRT, item.isRetweet()) + .addOnLongClickListener(R.id.tweetText) + .linkify(R.id.tweetText); + + } + adapter.setOnItemChildLongClickListener(new BaseQuickAdapter.OnItemChildLongClickListener() { + @Override + public void onItemChildLongClick(BaseQuickAdapter adapter, View view, int position) { + Log.d(TAG, "onItemChildLongClick: "); + Toast.makeText(ItemClickActivity.this, "onItemChildLongClick" + position, Toast.LENGTH_SHORT).show(); + } + });*/ +// multipleItemAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { +// @Override +// public void onItemClick(BaseQuickAdapter adapter, View view, int position) { +// Log.d(TAG, "onItemClick: "); +// Toast.makeText(MultipleItemRvAdapterUseActivity.this, "onItemClick" + position, Toast.LENGTH_SHORT).show(); +// } +// }); +// multipleItemAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() { +// @Override +// public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) { +// Log.d(TAG, "onItemClick: "); +// Toast.makeText(MultipleItemRvAdapterUseActivity.this, "onItemChildClick" + view.getId(), Toast.LENGTH_SHORT).show(); +// } +// }); + mRecyclerView.setAdapter(multipleItemAdapter); + } +} diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/PullToRefreshUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/PullToRefreshUseActivity.java index b4397c148..e0dd04a1d 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/PullToRefreshUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/PullToRefreshUseActivity.java @@ -183,7 +183,11 @@ private void loadMore() { new Request(mNextRequestPage, new RequestCallBack() { @Override public void success(List data) { - setData(false, data); + /** + * fix https://github.com/CymChad/BaseRecyclerViewAdapterHelper/issues/2400 + */ + boolean isRefresh =mNextRequestPage ==1; + setData(isRefresh, data); } @Override diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionMultipleItemUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionMultipleItemUseActivity.java new file mode 100644 index 000000000..4207d4087 --- /dev/null +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionMultipleItemUseActivity.java @@ -0,0 +1,60 @@ +package com.chad.baserecyclerviewadapterhelper; + +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.Toast; + +import com.chad.baserecyclerviewadapterhelper.adapter.SectionMultipleItemAdapter; +import com.chad.baserecyclerviewadapterhelper.base.BaseActivity; +import com.chad.baserecyclerviewadapterhelper.data.DataServer; +import com.chad.baserecyclerviewadapterhelper.entity.SectionMultipleItem; +import com.chad.library.adapter.base.BaseQuickAdapter; + +import java.util.List; + +/** + * to get SectionMultipleItem you need follow two things + * 1.create entity which extend SectionMultiEntity + * 2.create adapter which extend BaseSectionMultiItemQuickAdapter + */ +public class SectionMultipleItemUseActivity extends BaseActivity { + private RecyclerView mRecyclerView; + private List mData; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_section_uer); + setBackBtn(); + setTitle("SectionMultiple Use"); + mRecyclerView = (RecyclerView) findViewById(R.id.rv_list); + mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); + + // 1. create entityList which item data extend SectionMultiEntity + mData = DataServer.getSectionMultiData(); + + // create adapter which extend BaseSectionMultiItemQuickAdapter provide your headerResId + SectionMultipleItemAdapter sectionAdapter = new SectionMultipleItemAdapter(R.layout.def_section_head, mData); + sectionAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() { + @Override + public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) { + SectionMultipleItem item = (SectionMultipleItem) adapter.getData().get(position); + switch (view.getId()) { + case R.id.card_view: + // 获取主体item相应数据给后期使用 + if (item.getVideo() != null) { + Toast.makeText(SectionMultipleItemUseActivity.this, item.getVideo().getName(), Toast.LENGTH_LONG).show(); + } + break; + default: + Toast.makeText(SectionMultipleItemUseActivity.this, "OnItemChildClickListener " + position, Toast.LENGTH_LONG).show(); + break; + + } + } + }); + mRecyclerView.setAdapter(sectionAdapter); + } +} diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/DemoMultipleItemRvAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/DemoMultipleItemRvAdapter.java new file mode 100644 index 000000000..40b0e1bdd --- /dev/null +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/DemoMultipleItemRvAdapter.java @@ -0,0 +1,66 @@ +package com.chad.baserecyclerviewadapterhelper.adapter; + +import android.support.annotation.Nullable; + +import com.chad.baserecyclerviewadapterhelper.adapter.provider.ImgItemProvider; +import com.chad.baserecyclerviewadapterhelper.adapter.provider.TextImgItemProvider; +import com.chad.baserecyclerviewadapterhelper.adapter.provider.TextItemProvider; +import com.chad.baserecyclerviewadapterhelper.entity.NormalMultipleEntity; +import com.chad.library.adapter.base.BaseViewHolder; +import com.chad.library.adapter.base.MultipleItemRvAdapter; + +import java.util.List; + +/** + * @author ChayChan + * modify by AllenCoder 2018/04/11 + * @description: MultipleItemRvAdapter demo + * @date 2018/3/30 11:28 + */ + +public class DemoMultipleItemRvAdapter extends MultipleItemRvAdapter { + + public static final int TYPE_TEXT = 100; + public static final int TYPE_IMG = 200; + public static final int TYPE_TEXT_IMG = 300; + + public DemoMultipleItemRvAdapter(@Nullable List data) { + super(data); + + //构造函数若有传其他参数可以在调用finishInitialize()之前进行赋值,赋值给全局变量 + //这样getViewType()和registerItemProvider()方法中可以获取到传过来的值 + //getViewType()中可能因为某些业务逻辑,需要将某个值传递过来进行判断,返回对应的viewType + //registerItemProvider()中可以将值传递给ItemProvider + + //If the constructor has other parameters, it needs to be assigned before calling finishInitialize() and assigned to the global variable + // This getViewType () and registerItemProvider () method can get the value passed over + // getViewType () may be due to some business logic, you need to pass a value to judge, return the corresponding viewType + //RegisterItemProvider() can pass value to ItemProvider + + finishInitialize(); + } + + @Override + protected int getViewType(NormalMultipleEntity entity) { + //根据实体类判断并返回对应的viewType,具体判断逻辑因业务不同,这里这是简单通过判断type属性 + //According to the entity class to determine and return the corresponding viewType, + //the specific judgment logic is different because of the business, here is simply by judging the type attribute + if (entity.type == NormalMultipleEntity.SINGLE_TEXT) { + return TYPE_TEXT; + } else if (entity.type == NormalMultipleEntity.SINGLE_IMG) { + return TYPE_IMG; + } else if (entity.type == NormalMultipleEntity.TEXT_IMG) { + return TYPE_TEXT_IMG; + } + return 0; + } + + @Override + public void registerItemProvider() { + //注册相关的条目provider + //Register related entries provider + mProviderDelegate.registerProvider(new TextItemProvider()); + mProviderDelegate.registerProvider(new ImgItemProvider()); + mProviderDelegate.registerProvider(new TextImgItemProvider()); + } +} diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/SectionMultipleItemAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/SectionMultipleItemAdapter.java new file mode 100644 index 000000000..e47e4944a --- /dev/null +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/SectionMultipleItemAdapter.java @@ -0,0 +1,57 @@ +package com.chad.baserecyclerviewadapterhelper.adapter; + +import com.chad.baserecyclerviewadapterhelper.R; +import com.chad.baserecyclerviewadapterhelper.entity.MultipleItem; +import com.chad.baserecyclerviewadapterhelper.entity.SectionMultipleItem; +import com.chad.library.adapter.base.BaseSectionMultiItemQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; + +import java.util.List; + +/** + * https://github.com/CymChad/BaseRecyclerViewAdapterHelper + */ +public class SectionMultipleItemAdapter extends BaseSectionMultiItemQuickAdapter { + /** + * init SectionMultipleItemAdapter + * 1. add your header resource layout + * 2. add some kind of items + * + * @param sectionHeadResId The section head layout id for each item + * @param data A new list is created out of this one to avoid mutable list + */ + public SectionMultipleItemAdapter(int sectionHeadResId, List data) { + super(sectionHeadResId, data); + addItemType(SectionMultipleItem.TEXT, R.layout.item_text_view); + addItemType(SectionMultipleItem.IMG_TEXT, R.layout.item_img_text_view); + } + + @Override + protected void convertHead(BaseViewHolder helper, final SectionMultipleItem item) { + // deal with header viewHolder + helper.setText(R.id.header, item.header); + helper.setVisible(R.id.more, item.isMore()); + helper.addOnClickListener(R.id.more); + } + + @Override + protected void convert(BaseViewHolder helper, SectionMultipleItem item) { + // deal with multiple type items viewHolder + helper.addOnClickListener(R.id.card_view); + switch (helper.getItemViewType()) { + case MultipleItem.TEXT: + helper.setText(R.id.tv, item.getVideo().getName()); + break; + case MultipleItem.IMG_TEXT: + switch (helper.getLayoutPosition() % 2) { + case 0: + helper.setImageResource(R.id.iv, R.mipmap.animation_img1); + break; + case 1: + helper.setImageResource(R.id.iv, R.mipmap.animation_img2); + break; + } + break; + } + } +} diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/ImgItemProvider.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/ImgItemProvider.java new file mode 100644 index 000000000..6a719ea8c --- /dev/null +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/ImgItemProvider.java @@ -0,0 +1,50 @@ +package com.chad.baserecyclerviewadapterhelper.adapter.provider; + +import android.widget.Toast; + +import com.chad.baserecyclerviewadapterhelper.R; +import com.chad.baserecyclerviewadapterhelper.adapter.DemoMultipleItemRvAdapter; +import com.chad.baserecyclerviewadapterhelper.entity.NormalMultipleEntity; +import com.chad.library.adapter.base.BaseViewHolder; +import com.chad.library.adapter.base.provider.BaseItemProvider; + +/** + * https://github.com/chaychan + * + * @author ChayChan + * @description: Img ItemProvider + * @date 2018/3/30 11:39 + */ + +public class ImgItemProvider extends BaseItemProvider { + + @Override + public int viewType() { + return DemoMultipleItemRvAdapter.TYPE_IMG; + } + + @Override + public int layout() { + return R.layout.item_image_view; + } + + @Override + public void convert(BaseViewHolder helper, NormalMultipleEntity data, int position) { + if (position % 2 == 0) { + helper.setImageResource(R.id.iv, R.mipmap.animation_img1); + }else{ + helper.setImageResource(R.id.iv, R.mipmap.animation_img2); + } + } + + @Override + public void onClick(BaseViewHolder helper, NormalMultipleEntity data, int position) { + Toast.makeText(mContext, "click", Toast.LENGTH_SHORT).show(); + } + + @Override + public boolean onLongClick(BaseViewHolder helper, NormalMultipleEntity data, int position) { + Toast.makeText(mContext, "longClick", Toast.LENGTH_SHORT).show(); + return true; + } +} diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/TextImgItemProvider.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/TextImgItemProvider.java new file mode 100644 index 000000000..d5d87227e --- /dev/null +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/TextImgItemProvider.java @@ -0,0 +1,49 @@ +package com.chad.baserecyclerviewadapterhelper.adapter.provider; + +import android.widget.Toast; + +import com.chad.baserecyclerviewadapterhelper.R; +import com.chad.baserecyclerviewadapterhelper.adapter.DemoMultipleItemRvAdapter; +import com.chad.baserecyclerviewadapterhelper.entity.NormalMultipleEntity; +import com.chad.library.adapter.base.BaseViewHolder; +import com.chad.library.adapter.base.provider.BaseItemProvider; + +/** + * https://github.com/chaychan + * @author ChayChan + * @description: Text Img ItemProvider + * @date 2018/3/30 11:39 + */ +public class TextImgItemProvider extends BaseItemProvider { + + @Override + public int viewType() { + return DemoMultipleItemRvAdapter.TYPE_TEXT_IMG; + } + + @Override + public int layout() { + return R.layout.item_img_text_view; + } + + @Override + public void convert(BaseViewHolder helper, NormalMultipleEntity data, int position) { + helper.setText(R.id.tv, data.content); + if (position % 2 == 0) { + helper.setImageResource(R.id.iv, R.mipmap.animation_img1); + }else{ + helper.setImageResource(R.id.iv, R.mipmap.animation_img2); + } + } + + @Override + public void onClick(BaseViewHolder helper, NormalMultipleEntity data, int position) { + Toast.makeText(mContext, "click", Toast.LENGTH_SHORT).show(); + } + + @Override + public boolean onLongClick(BaseViewHolder helper, NormalMultipleEntity data, int position) { + Toast.makeText(mContext, "longClick", Toast.LENGTH_SHORT).show(); + return true; + } +} diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/TextItemProvider.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/TextItemProvider.java new file mode 100644 index 000000000..86b1c7061 --- /dev/null +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/provider/TextItemProvider.java @@ -0,0 +1,46 @@ +package com.chad.baserecyclerviewadapterhelper.adapter.provider; + +import android.widget.Toast; + +import com.chad.baserecyclerviewadapterhelper.R; +import com.chad.baserecyclerviewadapterhelper.adapter.DemoMultipleItemRvAdapter; +import com.chad.baserecyclerviewadapterhelper.entity.NormalMultipleEntity; +import com.chad.library.adapter.base.BaseViewHolder; +import com.chad.library.adapter.base.provider.BaseItemProvider; + +/** + * https://github.com/chaychan + * + * @author ChayChan + * @description: Text ItemProvider + * @date 2018/3/30 11:39 + */ + +public class TextItemProvider extends BaseItemProvider { + + @Override + public int viewType() { + return DemoMultipleItemRvAdapter.TYPE_TEXT; + } + + @Override + public int layout() { + return R.layout.item_text_view; + } + + @Override + public void convert(BaseViewHolder helper, NormalMultipleEntity data, int position) { + helper.setText(R.id.tv, data.content); + } + + @Override + public void onClick(BaseViewHolder helper, NormalMultipleEntity data, int position) { + Toast.makeText(mContext, "click", Toast.LENGTH_SHORT).show(); + } + + @Override + public boolean onLongClick(BaseViewHolder helper, NormalMultipleEntity data, int position) { + Toast.makeText(mContext, "longClick", Toast.LENGTH_SHORT).show(); + return true; + } +} diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/data/DataServer.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/data/DataServer.java index 3e18a4431..67ae1d228 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/data/DataServer.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/data/DataServer.java @@ -3,6 +3,8 @@ import com.chad.baserecyclerviewadapterhelper.entity.MultipleItem; import com.chad.baserecyclerviewadapterhelper.entity.MySection; +import com.chad.baserecyclerviewadapterhelper.entity.NormalMultipleEntity; +import com.chad.baserecyclerviewadapterhelper.entity.SectionMultipleItem; import com.chad.baserecyclerviewadapterhelper.entity.Status; import com.chad.baserecyclerviewadapterhelper.entity.Video; @@ -16,6 +18,7 @@ public class DataServer { private static final String HTTPS_AVATARS1_GITHUBUSERCONTENT_COM_LINK = "https://avatars1.githubusercontent.com/u/7698209?v=3&s=460"; private static final String CYM_CHAD = "CymChad"; + private static final String CHAY_CHAN = "ChayChan"; private DataServer() { } @@ -71,6 +74,34 @@ public static List getSampleData() { return list; } + public static List getSectionMultiData() { + List list = new ArrayList<>(); + Video video = new Video(HTTPS_AVATARS1_GITHUBUSERCONTENT_COM_LINK, CYM_CHAD); + + // add section data + list.add(new SectionMultipleItem(true, "Section 1", true)); + // add multiple type item data ---start--- + list.add(new SectionMultipleItem(SectionMultipleItem.TEXT, new Video(HTTPS_AVATARS1_GITHUBUSERCONTENT_COM_LINK, "video_id_0"))); + list.add(new SectionMultipleItem(SectionMultipleItem.TEXT, new Video(HTTPS_AVATARS1_GITHUBUSERCONTENT_COM_LINK, "video_id_1"))); + list.add(new SectionMultipleItem(SectionMultipleItem.IMG_TEXT, new Video(HTTPS_AVATARS1_GITHUBUSERCONTENT_COM_LINK, "video_id_2"))); + // ---end--- + + list.add(new SectionMultipleItem(true, "Section 2", false)); + list.add(new SectionMultipleItem(SectionMultipleItem.IMG_TEXT, video)); + list.add(new SectionMultipleItem(SectionMultipleItem.IMG_TEXT, video)); + list.add(new SectionMultipleItem(SectionMultipleItem.TEXT, video)); + list.add(new SectionMultipleItem(SectionMultipleItem.TEXT, video)); + list.add(new SectionMultipleItem(true, "Section 3", false)); + list.add(new SectionMultipleItem(SectionMultipleItem.IMG_TEXT, video)); + list.add(new SectionMultipleItem(true, "Section 4", false)); + list.add(new SectionMultipleItem(SectionMultipleItem.TEXT, video)); + list.add(new SectionMultipleItem(true, "Section 5", false)); + list.add(new SectionMultipleItem(SectionMultipleItem.IMG_TEXT, video)); + list.add(new SectionMultipleItem(SectionMultipleItem.IMG_TEXT, video)); + list.add(new SectionMultipleItem(SectionMultipleItem.IMG_TEXT, video)); + return list; + } + public static List getStrData() { List list = new ArrayList<>(); for (int i = 0; i < 20; i++) { @@ -96,6 +127,18 @@ public static List getMultipleItemData() { return list; } + public static List getNormalMultipleEntities() { + List list = new ArrayList<>(); + for (int i = 0; i <= 4; i++) { + list.add(new NormalMultipleEntity(NormalMultipleEntity.SINGLE_IMG)); + list.add(new NormalMultipleEntity(NormalMultipleEntity.SINGLE_TEXT,CHAY_CHAN)); + list.add(new NormalMultipleEntity(NormalMultipleEntity.TEXT_IMG,CHAY_CHAN)); + list.add(new NormalMultipleEntity(NormalMultipleEntity.TEXT_IMG,CYM_CHAD)); + list.add(new NormalMultipleEntity(NormalMultipleEntity.TEXT_IMG,CHAY_CHAN)); + } + return list; + } + // public static List getMultipleChildView() { // List list = new ArrayList<>(); // for (int i = 0; i <= 4; i++) { diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/entity/NormalMultipleEntity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/entity/NormalMultipleEntity.java new file mode 100644 index 000000000..2ed0a3263 --- /dev/null +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/entity/NormalMultipleEntity.java @@ -0,0 +1,28 @@ +package com.chad.baserecyclerviewadapterhelper.entity; + +/** + * https://github.com/chaychan + * + * @author ChayChan + * @description: NormalEntity,need not implements MultiItemEntity interface + * @date 2018/3/30 11:13 + */ + +public class NormalMultipleEntity { + + public static final int SINGLE_TEXT = 1; + public static final int SINGLE_IMG = 2; + public static final int TEXT_IMG = 3; + + public int type; + public String content; + + public NormalMultipleEntity(int type) { + this.type = type; + } + + public NormalMultipleEntity(int type, String content) { + this.type = type; + this.content = content; + } +} diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/entity/SectionMultipleItem.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/entity/SectionMultipleItem.java new file mode 100644 index 000000000..84384ce21 --- /dev/null +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/entity/SectionMultipleItem.java @@ -0,0 +1,49 @@ +package com.chad.baserecyclerviewadapterhelper.entity; + +import com.chad.library.adapter.base.entity.MultiItemEntity; +import com.chad.library.adapter.base.entity.SectionMultiEntity; + +/** + * https://github.com/CymChad/BaseRecyclerViewAdapterHelper + */ +public class SectionMultipleItem extends SectionMultiEntity