From 0e66d9a869a5cb1bc71ee1f3a619658ba8b56fa0 Mon Sep 17 00:00:00 2001 From: Allen Date: Sun, 13 Jan 2019 12:59:28 +0800 Subject: [PATCH 01/45] Revert "merge new feature to Androidx " --- app/build.gradle | 6 ++--- .../AnimationUseActivity.java | 4 ++-- .../DataBindingUseActivity.java | 4 ++-- .../EmptyViewUseActivity.java | 4 ++-- .../ExpandableUseActivity.java | 4 ++-- .../HeaderAndFooterUseActivity.java | 4 ++-- .../HomeActivity.java | 6 ++--- .../ItemClickActivity.java | 4 ++-- .../ItemDragAndSwipeUseActivity.java | 8 +++---- .../MultipleItemRvAdapterUseActivity.java | 7 ++++-- .../MultipleItemUseActivity.java | 8 ++++--- .../PullToRefreshUseActivity.java | 6 ++--- .../SectionMultipleItemUseActivity.java | 4 ++-- .../SectionUseActivity.java | 4 ++-- .../UpFetchUseActivity.java | 4 ++-- .../WelcomeActivity.java | 2 +- .../adapter/DataBindingUseAdapter.java | 4 ++-- .../adapter/DemoMultipleItemRvAdapter.java | 2 +- .../adapter/ItemClickAdapter.java | 6 ++--- .../base/BaseActivity.java | 4 ++-- .../base/BaseBindingViewHolder.java | 2 +- .../base/BaseDataBindingAdapter.java | 8 +++---- .../decoration/GridItemDecoration.java | 4 ++-- .../GridSectionAverageGapItemDecoration.java | 5 ++--- .../util/SpannableStringUtils.java | 8 +++---- .../util/ToastUtils.java | 2 +- .../main/res/layout/activity_adapter_use.xml | 2 +- ...activity_choose_multiple_item_use_type.xml | 8 +++---- .../res/layout/activity_data_binding_use.xml | 2 +- .../res/layout/activity_empty_view_use.xml | 4 ++-- .../layout/activity_expandable_item_use.xml | 2 +- .../layout/activity_header_and_footer_use.xml | 2 +- app/src/main/res/layout/activity_home.xml | 2 +- .../main/res/layout/activity_item_click.xml | 2 +- .../res/layout/activity_item_touch_use.xml | 2 +- app/src/main/res/layout/activity_main.xml | 6 ++--- .../res/layout/activity_multiple_item_use.xml | 2 +- .../main/res/layout/activity_section_uer.xml | 2 +- app/src/main/res/layout/def_section_head.xml | 4 ++-- app/src/main/res/layout/home_item_view.xml | 4 ++-- .../res/layout/item_header_and_footer.xml | 4 ++-- app/src/main/res/layout/item_image_view.xml | 4 ++-- .../main/res/layout/item_img_text_view.xml | 4 ++-- app/src/main/res/layout/item_movie.xml | 6 ++--- app/src/main/res/layout/item_nest_click.xml | 2 +- .../main/res/layout/item_section_content.xml | 4 ++-- app/src/main/res/layout/item_text_view.xml | 4 ++-- app/src/main/res/layout/layout_animation.xml | 4 ++-- app/src/main/res/layout/toolbar_layout.xml | 4 ++-- build.gradle | 1 + gradle.properties | 2 -- gradle/wrapper/gradle-wrapper.properties | 4 ++-- library/build.gradle | 4 ++-- .../base/BaseItemDraggableAdapter.java | 8 +++---- .../base/BaseMultiItemQuickAdapter.java | 5 ++--- .../adapter/base/BaseQuickAdapter.java | 22 +++++++++---------- .../BaseSectionMultiItemQuickAdapter.java | 4 ++-- .../library/adapter/base/BaseViewHolder.java | 10 ++++----- .../adapter/base/MultipleItemRvAdapter.java | 2 +- .../callback/ItemDragAndSwipeCallback.java | 4 ++-- .../base/listener/OnItemDragListener.java | 2 +- .../base/listener/OnItemSwipeListener.java | 2 +- .../base/listener/SimpleClickListener.java | 4 ++-- .../adapter/base/loadmore/LoadMoreView.java | 4 ++-- .../adapter/base/util/MultiTypeDelegate.java | 2 +- 65 files changed, 143 insertions(+), 141 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8b564492b..73d501ed4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -27,9 +27,9 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation project(path: ':library') implementation project(':material-spinner-1.0.5') - implementation 'com.google.android.material:material:1.0.0' - implementation 'androidx.cardview:cardview:1.0.0' - implementation 'androidx.appcompat:appcompat:1.0.2' + implementation 'com.android.support:design:28.0.0' + implementation 'com.android.support:cardview-v7:28.0.0' + implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.kyleduo.switchbutton:library:2.0.0' implementation 'com.orhanobut:logger:2.2.0' } diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/AnimationUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/AnimationUseActivity.java index a8e83267d..dad382d42 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/AnimationUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/AnimationUseActivity.java @@ -2,8 +2,8 @@ import android.app.Activity; import android.os.Bundle; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.CompoundButton; import android.widget.ImageView; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/DataBindingUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/DataBindingUseActivity.java index 984e1125c..3acf9acbb 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/DataBindingUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/DataBindingUseActivity.java @@ -1,8 +1,8 @@ package com.chad.baserecyclerviewadapterhelper; import android.os.Bundle; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.View; import com.chad.baserecyclerviewadapterhelper.adapter.DataBindingUseAdapter; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/EmptyViewUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/EmptyViewUseActivity.java index 57163bdf5..59b01d54b 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/EmptyViewUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/EmptyViewUseActivity.java @@ -2,8 +2,8 @@ import android.os.Bundle; import android.os.Handler; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ExpandableUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ExpandableUseActivity.java index 3bacfdeb6..5afccd64e 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ExpandableUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ExpandableUseActivity.java @@ -1,8 +1,8 @@ package com.chad.baserecyclerviewadapterhelper; import android.os.Bundle; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; import com.chad.baserecyclerviewadapterhelper.adapter.ExpandableItemAdapter; import com.chad.baserecyclerviewadapterhelper.base.BaseActivity; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/HeaderAndFooterUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/HeaderAndFooterUseActivity.java index ce4bbcd05..fba78f959 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/HeaderAndFooterUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/HeaderAndFooterUseActivity.java @@ -1,8 +1,8 @@ package com.chad.baserecyclerviewadapterhelper; import android.os.Bundle; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/HomeActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/HomeActivity.java index e675ff593..5e8f58d0a 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/HomeActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/HomeActivity.java @@ -2,9 +2,9 @@ import android.content.Intent; import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemClickActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemClickActivity.java index f00fe7f8a..a8f97b1ea 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemClickActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemClickActivity.java @@ -1,8 +1,8 @@ package com.chad.baserecyclerviewadapterhelper; import android.os.Bundle; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.MotionEvent; import android.view.View; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemDragAndSwipeUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemDragAndSwipeUseActivity.java index 3fc1e45f0..9d9abcb52 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemDragAndSwipeUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemDragAndSwipeUseActivity.java @@ -4,10 +4,10 @@ import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; -import androidx.core.content.ContextCompat; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.recyclerview.widget.ItemTouchHelper; +import android.support.v4.content.ContextCompat; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; import android.util.Log; import android.view.View; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemRvAdapterUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemRvAdapterUseActivity.java index ddd5bd346..099522b98 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemRvAdapterUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemRvAdapterUseActivity.java @@ -1,8 +1,11 @@ package com.chad.baserecyclerviewadapterhelper; import android.os.Bundle; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; +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; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemUseActivity.java index a6c89d339..9bbfd0606 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemUseActivity.java @@ -1,9 +1,11 @@ package com.chad.baserecyclerviewadapterhelper; import android.os.Bundle; - -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; +import android.support.v4.widget.DrawerLayout; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.view.ViewGroup; import com.chad.baserecyclerviewadapterhelper.adapter.MultipleItemQuickAdapter; import com.chad.baserecyclerviewadapterhelper.base.BaseActivity; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/PullToRefreshUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/PullToRefreshUseActivity.java index 7f4d38157..e0dd04a1d 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/PullToRefreshUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/PullToRefreshUseActivity.java @@ -4,9 +4,9 @@ import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionMultipleItemUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionMultipleItemUseActivity.java index 2155ea7b7..4207d4087 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionMultipleItemUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionMultipleItemUseActivity.java @@ -1,8 +1,8 @@ package com.chad.baserecyclerviewadapterhelper; import android.os.Bundle; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.Toast; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionUseActivity.java index 0fb59b520..15b9f6372 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionUseActivity.java @@ -1,8 +1,8 @@ package com.chad.baserecyclerviewadapterhelper; import android.os.Bundle; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.Toast; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/UpFetchUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/UpFetchUseActivity.java index 92fe89263..22f9438e2 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/UpFetchUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/UpFetchUseActivity.java @@ -1,8 +1,8 @@ package com.chad.baserecyclerviewadapterhelper; import android.os.Bundle; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import com.chad.baserecyclerviewadapterhelper.adapter.UpFetchAdapter; import com.chad.baserecyclerviewadapterhelper.base.BaseActivity; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/WelcomeActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/WelcomeActivity.java index f7b939b56..ec0f87a2b 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/WelcomeActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/WelcomeActivity.java @@ -3,7 +3,7 @@ import android.content.Intent; import android.os.Bundle; import android.os.Handler; -import androidx.appcompat.app.AppCompatActivity; +import android.support.v7.app.AppCompatActivity; public class WelcomeActivity extends AppCompatActivity { diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/DataBindingUseAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/DataBindingUseAdapter.java index f24c3060e..6e5459927 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/DataBindingUseAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/DataBindingUseAdapter.java @@ -1,7 +1,7 @@ package com.chad.baserecyclerviewadapterhelper.adapter; -import androidx.databinding.DataBindingUtil; -import androidx.databinding.ViewDataBinding; +import android.databinding.DataBindingUtil; +import android.databinding.ViewDataBinding; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/DemoMultipleItemRvAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/DemoMultipleItemRvAdapter.java index fa4e109d9..40b0e1bdd 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/DemoMultipleItemRvAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/DemoMultipleItemRvAdapter.java @@ -1,6 +1,6 @@ package com.chad.baserecyclerviewadapterhelper.adapter; -import androidx.annotation.Nullable; +import android.support.annotation.Nullable; import com.chad.baserecyclerviewadapterhelper.adapter.provider.ImgItemProvider; import com.chad.baserecyclerviewadapterhelper.adapter.provider.TextImgItemProvider; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/ItemClickAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/ItemClickAdapter.java index f156db6e9..1769b1ca9 100755 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/ItemClickAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/ItemClickAdapter.java @@ -1,7 +1,7 @@ package com.chad.baserecyclerviewadapterhelper.adapter; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.Toast; @@ -53,7 +53,7 @@ protected void convert(final BaseViewHolder helper, final ClickEntity item) { case ClickEntity.NEST_CLICK_ITEM_CHILD_VIEW: helper.setNestView(R.id.item_click); // u can set nestview id final RecyclerView recyclerView = helper.getView(R.id.nest_list); - recyclerView.setLayoutManager(new LinearLayoutManager(helper.itemView.getContext(), RecyclerView.VERTICAL, false)); + recyclerView.setLayoutManager(new LinearLayoutManager(helper.itemView.getContext(), LinearLayoutManager.VERTICAL, false)); recyclerView.setHasFixedSize(true); nestAdapter = new NestAdapter(); diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseActivity.java index 1e54dc9e4..27dd52edc 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseActivity.java @@ -2,8 +2,8 @@ import android.os.Build; import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseBindingViewHolder.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseBindingViewHolder.java index 47e139c22..e9ed97d0a 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseBindingViewHolder.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseBindingViewHolder.java @@ -1,6 +1,6 @@ package com.chad.baserecyclerviewadapterhelper.base; -import androidx.databinding.ViewDataBinding; +import android.databinding.ViewDataBinding; import android.view.View; import com.chad.library.adapter.base.BaseViewHolder; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseDataBindingAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseDataBindingAdapter.java index ab0932f2b..0fbf329e2 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseDataBindingAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseDataBindingAdapter.java @@ -1,9 +1,9 @@ package com.chad.baserecyclerviewadapterhelper.base; -import androidx.databinding.DataBindingUtil; -import androidx.databinding.ViewDataBinding; -import androidx.annotation.LayoutRes; -import androidx.annotation.Nullable; +import android.databinding.DataBindingUtil; +import android.databinding.ViewDataBinding; +import android.support.annotation.LayoutRes; +import android.support.annotation.Nullable; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridItemDecoration.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridItemDecoration.java index f14536f8b..c1b3e0de3 100755 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridItemDecoration.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridItemDecoration.java @@ -4,8 +4,8 @@ import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.View; /** diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridSectionAverageGapItemDecoration.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridSectionAverageGapItemDecoration.java index 241572c9c..b265248cc 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridSectionAverageGapItemDecoration.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridSectionAverageGapItemDecoration.java @@ -2,6 +2,8 @@ import android.graphics.Rect; import android.os.Build; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.View; @@ -11,9 +13,6 @@ import com.chad.library.adapter.base.BaseViewHolder; import com.chad.library.adapter.base.entity.SectionEntity; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - /** * 应用于RecyclerView的GridLayoutManager,水平方向上固定间距大小,从而使条目宽度自适应。
* 配合Brvah的Section使用,不对Head生效,仅对每个Head的子Grid列表生效
diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/util/SpannableStringUtils.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/util/SpannableStringUtils.java index 88aa180fa..48103c66f 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/util/SpannableStringUtils.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/util/SpannableStringUtils.java @@ -5,10 +5,10 @@ import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.net.Uri; -import androidx.annotation.ColorInt; -import androidx.annotation.DrawableRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; +import android.support.annotation.ColorInt; +import android.support.annotation.DrawableRes; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.text.Layout.Alignment; import android.text.SpannableStringBuilder; import android.text.Spanned; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/util/ToastUtils.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/util/ToastUtils.java index 262299e81..ca7b920b2 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/util/ToastUtils.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/util/ToastUtils.java @@ -2,7 +2,7 @@ import android.os.Handler; import android.os.Looper; -import androidx.annotation.StringRes; +import android.support.annotation.StringRes; import android.widget.Toast; public class ToastUtils { diff --git a/app/src/main/res/layout/activity_adapter_use.xml b/app/src/main/res/layout/activity_adapter_use.xml index 4dd6a9982..31c2f5bb0 100644 --- a/app/src/main/res/layout/activity_adapter_use.xml +++ b/app/src/main/res/layout/activity_adapter_use.xml @@ -63,7 +63,7 @@ - - - + - - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_data_binding_use.xml b/app/src/main/res/layout/activity_data_binding_use.xml index ce25cac00..68c31c7c0 100644 --- a/app/src/main/res/layout/activity_data_binding_use.xml +++ b/app/src/main/res/layout/activity_data_binding_use.xml @@ -7,7 +7,7 @@ android:background="@color/bg" tools:context="com.chad.baserecyclerviewadapterhelper.DataBindingUseActivity"> - - - - diff --git a/app/src/main/res/layout/activity_header_and_footer_use.xml b/app/src/main/res/layout/activity_header_and_footer_use.xml index 609fe08b5..a028223ca 100644 --- a/app/src/main/res/layout/activity_header_and_footer_use.xml +++ b/app/src/main/res/layout/activity_header_and_footer_use.xml @@ -5,7 +5,7 @@ android:background="@color/bg" android:orientation="vertical"> - diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml index 7aa764211..549e55ebd 100644 --- a/app/src/main/res/layout/activity_home.xml +++ b/app/src/main/res/layout/activity_home.xml @@ -6,7 +6,7 @@ android:background="@color/bg" android:orientation="vertical"> - diff --git a/app/src/main/res/layout/activity_item_click.xml b/app/src/main/res/layout/activity_item_click.xml index f2251d0f0..0a941e2a6 100644 --- a/app/src/main/res/layout/activity_item_click.xml +++ b/app/src/main/res/layout/activity_item_click.xml @@ -9,7 +9,7 @@ android:focusableInTouchMode="true" tools:context="com.chad.baserecyclerviewadapterhelper.ItemClickActivity"> - diff --git a/app/src/main/res/layout/activity_item_touch_use.xml b/app/src/main/res/layout/activity_item_touch_use.xml index abf752a92..111125cf2 100644 --- a/app/src/main/res/layout/activity_item_touch_use.xml +++ b/app/src/main/res/layout/activity_item_touch_use.xml @@ -5,7 +5,7 @@ android:layout_height="match_parent" android:background="@color/bg" > - - - + diff --git a/app/src/main/res/layout/activity_multiple_item_use.xml b/app/src/main/res/layout/activity_multiple_item_use.xml index d8d109bf3..35f3f927e 100644 --- a/app/src/main/res/layout/activity_multiple_item_use.xml +++ b/app/src/main/res/layout/activity_multiple_item_use.xml @@ -7,7 +7,7 @@ android:background="@color/bg" android:orientation="vertical"> - diff --git a/app/src/main/res/layout/activity_section_uer.xml b/app/src/main/res/layout/activity_section_uer.xml index 7c11364cb..cb4608c04 100644 --- a/app/src/main/res/layout/activity_section_uer.xml +++ b/app/src/main/res/layout/activity_section_uer.xml @@ -6,7 +6,7 @@ android:layout_height="match_parent" android:background="@color/bg" tools:context=".SectionUseActivity"> - diff --git a/app/src/main/res/layout/def_section_head.xml b/app/src/main/res/layout/def_section_head.xml index d4c376845..8ba2cc8e0 100755 --- a/app/src/main/res/layout/def_section_head.xml +++ b/app/src/main/res/layout/def_section_head.xml @@ -1,4 +1,4 @@ - - + diff --git a/app/src/main/res/layout/home_item_view.xml b/app/src/main/res/layout/home_item_view.xml index 21842a60b..6d0cb5151 100755 --- a/app/src/main/res/layout/home_item_view.xml +++ b/app/src/main/res/layout/home_item_view.xml @@ -6,7 +6,7 @@ android:gravity="center" android:orientation="horizontal"> - - + diff --git a/app/src/main/res/layout/item_header_and_footer.xml b/app/src/main/res/layout/item_header_and_footer.xml index 953e276a5..c47aa912b 100644 --- a/app/src/main/res/layout/item_header_and_footer.xml +++ b/app/src/main/res/layout/item_header_and_footer.xml @@ -1,5 +1,5 @@ - - + diff --git a/app/src/main/res/layout/item_image_view.xml b/app/src/main/res/layout/item_image_view.xml index 96989bae3..13a6f136e 100644 --- a/app/src/main/res/layout/item_image_view.xml +++ b/app/src/main/res/layout/item_image_view.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/item_img_text_view.xml b/app/src/main/res/layout/item_img_text_view.xml index ecb16ada3..07b69c94a 100644 --- a/app/src/main/res/layout/item_img_text_view.xml +++ b/app/src/main/res/layout/item_img_text_view.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/item_movie.xml b/app/src/main/res/layout/item_movie.xml index c4b604452..1fdc07f3c 100644 --- a/app/src/main/res/layout/item_movie.xml +++ b/app/src/main/res/layout/item_movie.xml @@ -13,7 +13,7 @@ type="com.chad.baserecyclerviewadapterhelper.entity.MoviePresenter"/> - - - + diff --git a/app/src/main/res/layout/item_nest_click.xml b/app/src/main/res/layout/item_nest_click.xml index 6a5159ba4..d114dd1bd 100644 --- a/app/src/main/res/layout/item_nest_click.xml +++ b/app/src/main/res/layout/item_nest_click.xml @@ -7,7 +7,7 @@ android:layout_height="wrap_content" android:background="@color/bg" > - diff --git a/app/src/main/res/layout/item_section_content.xml b/app/src/main/res/layout/item_section_content.xml index 5734cb29a..4d072f82d 100644 --- a/app/src/main/res/layout/item_section_content.xml +++ b/app/src/main/res/layout/item_section_content.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/item_text_view.xml b/app/src/main/res/layout/item_text_view.xml index 0aa9a53c6..ff68f4738 100644 --- a/app/src/main/res/layout/item_text_view.xml +++ b/app/src/main/res/layout/item_text_view.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_animation.xml b/app/src/main/res/layout/layout_animation.xml index 0cdf26db1..d6dab42f9 100755 --- a/app/src/main/res/layout/layout_animation.xml +++ b/app/src/main/res/layout/layout_animation.xml @@ -1,5 +1,5 @@ - - + diff --git a/app/src/main/res/layout/toolbar_layout.xml b/app/src/main/res/layout/toolbar_layout.xml index 9b760d57b..bd657b040 100644 --- a/app/src/main/res/layout/toolbar_layout.xml +++ b/app/src/main/res/layout/toolbar_layout.xml @@ -1,5 +1,5 @@ - - + diff --git a/build.gradle b/build.gradle index 86adc6f82..2d4a79afe 100644 --- a/build.gradle +++ b/build.gradle @@ -4,6 +4,7 @@ buildscript { jcenter() mavenLocal() mavenCentral() + } dependencies { classpath 'com.android.tools.build:gradle:3.2.1' diff --git a/gradle.properties b/gradle.properties index 028ef0806..780b865cd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,5 +19,3 @@ android.enableBuildCache=true android.enableD8=true android.buildCacheDir=./build/buildCache/ -android.useAndroidX=true -android.enableJetifier=true diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 22780482a..e6b1884fa 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sat Jan 12 19:58:40 AWST 2019 +#Thu Mar 29 22:14:15 CST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip diff --git a/library/build.gradle b/library/build.gradle index 5ec13a2b7..78add0500 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -3,7 +3,7 @@ android { compileSdkVersion 28 defaultConfig { - minSdkVersion 11 + minSdkVersion 14 targetSdkVersion 28 versionCode 1 versionName "1.0" @@ -48,5 +48,5 @@ artifacts { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - compileOnly 'androidx.recyclerview:recyclerview:1.0.0' + compileOnly 'com.android.support:recyclerview-v7:28.0.0' } diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseItemDraggableAdapter.java b/library/src/main/java/com/chad/library/adapter/base/BaseItemDraggableAdapter.java index 1813ff84c..b5cd5d742 100644 --- a/library/src/main/java/com/chad/library/adapter/base/BaseItemDraggableAdapter.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseItemDraggableAdapter.java @@ -1,10 +1,10 @@ package com.chad.library.adapter.base; import android.graphics.Canvas; -import androidx.annotation.NonNull; -import androidx.core.view.MotionEventCompat; -import androidx.recyclerview.widget.RecyclerView; -import androidx.recyclerview.widget.ItemTouchHelper; +import android.support.annotation.NonNull; +import android.support.v4.view.MotionEventCompat; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; import android.view.MotionEvent; import android.view.View; diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseMultiItemQuickAdapter.java b/library/src/main/java/com/chad/library/adapter/base/BaseMultiItemQuickAdapter.java index 1a62968b9..d463452d0 100644 --- a/library/src/main/java/com/chad/library/adapter/base/BaseMultiItemQuickAdapter.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseMultiItemQuickAdapter.java @@ -1,8 +1,7 @@ package com.chad.library.adapter.base; -import androidx.annotation.IntRange; -import androidx.annotation.LayoutRes; - +import android.support.annotation.IntRange; +import android.support.annotation.LayoutRes; import android.util.SparseIntArray; import android.view.ViewGroup; import com.chad.library.adapter.base.entity.IExpandable; diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java index a2cb31575..3a8ee9c7c 100755 --- a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java @@ -20,17 +20,17 @@ import android.animation.Animator; import android.content.Context; -import androidx.annotation.IdRes; -import androidx.annotation.IntDef; -import androidx.annotation.IntRange; -import androidx.annotation.LayoutRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.recyclerview.widget.RecyclerView.LayoutParams; -import androidx.recyclerview.widget.StaggeredGridLayoutManager; +import android.support.annotation.IdRes; +import android.support.annotation.IntDef; +import android.support.annotation.IntRange; +import android.support.annotation.LayoutRes; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.RecyclerView.LayoutParams; +import android.support.v7.widget.StaggeredGridLayoutManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseSectionMultiItemQuickAdapter.java b/library/src/main/java/com/chad/library/adapter/base/BaseSectionMultiItemQuickAdapter.java index f96fc8a29..858baa08c 100644 --- a/library/src/main/java/com/chad/library/adapter/base/BaseSectionMultiItemQuickAdapter.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseSectionMultiItemQuickAdapter.java @@ -1,7 +1,7 @@ package com.chad.library.adapter.base; -import androidx.annotation.IntRange; -import androidx.annotation.LayoutRes; +import android.support.annotation.IntRange; +import android.support.annotation.LayoutRes; import android.util.SparseIntArray; import android.view.ViewGroup; diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseViewHolder.java b/library/src/main/java/com/chad/library/adapter/base/BaseViewHolder.java index 01b89f57f..19694df52 100755 --- a/library/src/main/java/com/chad/library/adapter/base/BaseViewHolder.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseViewHolder.java @@ -20,11 +20,11 @@ import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.os.Build; -import androidx.annotation.ColorInt; -import androidx.annotation.DrawableRes; -import androidx.annotation.IdRes; -import androidx.annotation.StringRes; -import androidx.recyclerview.widget.RecyclerView; +import android.support.annotation.ColorInt; +import android.support.annotation.DrawableRes; +import android.support.annotation.IdRes; +import android.support.annotation.StringRes; +import android.support.v7.widget.RecyclerView; import android.text.util.Linkify; import android.util.SparseArray; import android.view.View; diff --git a/library/src/main/java/com/chad/library/adapter/base/MultipleItemRvAdapter.java b/library/src/main/java/com/chad/library/adapter/base/MultipleItemRvAdapter.java index 0df4a1187..5fc69f54c 100644 --- a/library/src/main/java/com/chad/library/adapter/base/MultipleItemRvAdapter.java +++ b/library/src/main/java/com/chad/library/adapter/base/MultipleItemRvAdapter.java @@ -1,6 +1,6 @@ package com.chad.library.adapter.base; -import androidx.annotation.Nullable; +import android.support.annotation.Nullable; import android.util.SparseArray; import android.view.View; diff --git a/library/src/main/java/com/chad/library/adapter/base/callback/ItemDragAndSwipeCallback.java b/library/src/main/java/com/chad/library/adapter/base/callback/ItemDragAndSwipeCallback.java index c89b496f4..a4f8974a7 100644 --- a/library/src/main/java/com/chad/library/adapter/base/callback/ItemDragAndSwipeCallback.java +++ b/library/src/main/java/com/chad/library/adapter/base/callback/ItemDragAndSwipeCallback.java @@ -1,8 +1,8 @@ package com.chad.library.adapter.base.callback; import android.graphics.Canvas; -import androidx.recyclerview.widget.RecyclerView; -import androidx.recyclerview.widget.ItemTouchHelper; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; import android.view.View; import com.chad.library.R; diff --git a/library/src/main/java/com/chad/library/adapter/base/listener/OnItemDragListener.java b/library/src/main/java/com/chad/library/adapter/base/listener/OnItemDragListener.java index 490868662..5c3cbe18a 100644 --- a/library/src/main/java/com/chad/library/adapter/base/listener/OnItemDragListener.java +++ b/library/src/main/java/com/chad/library/adapter/base/listener/OnItemDragListener.java @@ -1,6 +1,6 @@ package com.chad.library.adapter.base.listener; -import androidx.recyclerview.widget.RecyclerView; +import android.support.v7.widget.RecyclerView; /** * Created by luoxw on 2016/6/20. diff --git a/library/src/main/java/com/chad/library/adapter/base/listener/OnItemSwipeListener.java b/library/src/main/java/com/chad/library/adapter/base/listener/OnItemSwipeListener.java index 8eee3d376..9227a2c8c 100644 --- a/library/src/main/java/com/chad/library/adapter/base/listener/OnItemSwipeListener.java +++ b/library/src/main/java/com/chad/library/adapter/base/listener/OnItemSwipeListener.java @@ -1,7 +1,7 @@ package com.chad.library.adapter.base.listener; import android.graphics.Canvas; -import androidx.recyclerview.widget.RecyclerView; +import android.support.v7.widget.RecyclerView; /** * Created by luoxw on 2016/6/23. diff --git a/library/src/main/java/com/chad/library/adapter/base/listener/SimpleClickListener.java b/library/src/main/java/com/chad/library/adapter/base/listener/SimpleClickListener.java index ced038c47..0ad31c3ed 100644 --- a/library/src/main/java/com/chad/library/adapter/base/listener/SimpleClickListener.java +++ b/library/src/main/java/com/chad/library/adapter/base/listener/SimpleClickListener.java @@ -1,8 +1,8 @@ package com.chad.library.adapter.base.listener; import android.os.Build; -import androidx.core.view.GestureDetectorCompat; -import androidx.recyclerview.widget.RecyclerView; +import android.support.v4.view.GestureDetectorCompat; +import android.support.v7.widget.RecyclerView; import android.view.GestureDetector; import android.view.HapticFeedbackConstants; import android.view.MotionEvent; diff --git a/library/src/main/java/com/chad/library/adapter/base/loadmore/LoadMoreView.java b/library/src/main/java/com/chad/library/adapter/base/loadmore/LoadMoreView.java index dd764d250..1cd65d847 100644 --- a/library/src/main/java/com/chad/library/adapter/base/loadmore/LoadMoreView.java +++ b/library/src/main/java/com/chad/library/adapter/base/loadmore/LoadMoreView.java @@ -1,7 +1,7 @@ package com.chad.library.adapter.base.loadmore; -import androidx.annotation.IdRes; -import androidx.annotation.LayoutRes; +import android.support.annotation.IdRes; +import android.support.annotation.LayoutRes; import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseViewHolder; diff --git a/library/src/main/java/com/chad/library/adapter/base/util/MultiTypeDelegate.java b/library/src/main/java/com/chad/library/adapter/base/util/MultiTypeDelegate.java index 53e5114de..1babeacfe 100644 --- a/library/src/main/java/com/chad/library/adapter/base/util/MultiTypeDelegate.java +++ b/library/src/main/java/com/chad/library/adapter/base/util/MultiTypeDelegate.java @@ -1,6 +1,6 @@ package com.chad.library.adapter.base.util; -import androidx.annotation.LayoutRes; +import android.support.annotation.LayoutRes; import android.util.SparseIntArray; import java.util.List; From 31d83ed6c4b7b9c0b9bbc2a8671df7e640064f50 Mon Sep 17 00:00:00 2001 From: AllenCoder Date: Sun, 13 Jan 2019 13:32:32 +0800 Subject: [PATCH 02/45] 1.update master branch readme --- README-cn.md | 4 ++-- README.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README-cn.md b/README-cn.md index 81abccd16..a391ee1e3 100644 --- a/README-cn.md +++ b/README-cn.md @@ -42,10 +42,10 @@ 然后在dependencies添加: ``` dependencies { - compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.42' + compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46' } ``` -## [androidX 迁移库版本](https://github.com/CymChad/BaseRecyclerViewAdapterHelper/releases/tag/2.9.43-alpha1) +## [androidX 迁移库版本](https://github.com/CymChad/BaseRecyclerViewAdapterHelper/releases/tag/2.9.45-androidx) # 如何使用它来创建Adapter? ![demo](https://github.com/CymChad/BaseRecyclerViewAdapterHelper/blob/master/demo_res/item_view.png) diff --git a/README.md b/README.md index 43a0ba381..de456df0b 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Please feel free to use this. (Welcome to **Star** and **Fork**) kotlin demo :[BRVAH_kotlin](https://github.com/AllenCoder/BRVAH_kotlin) -## [androidX refactoring migration version, temporarily unstable](https://github.com/CymChad/BaseRecyclerViewAdapterHelper/releases/tag/2.9.43-alpha1) +## [androidX stable version ](https://github.com/CymChad/BaseRecyclerViewAdapterHelper/releases/tag/2.9.45-androidx) # Document - [English](https://github.com/CymChad/BaseRecyclerViewAdapterHelper/wiki) - [中文](http://www.jianshu.com/p/b343fcff51b0) From 01d64b60c802e560419869a2f8da4af4ed19d236 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 11:49:23 +0800 Subject: [PATCH 03/45] 1.add annotated parameter overrides @NonNull parameter --- .../callback/ItemDragAndSwipeCallback.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/library/src/main/java/com/chad/library/adapter/base/callback/ItemDragAndSwipeCallback.java b/library/src/main/java/com/chad/library/adapter/base/callback/ItemDragAndSwipeCallback.java index a4f8974a7..11dc80fef 100644 --- a/library/src/main/java/com/chad/library/adapter/base/callback/ItemDragAndSwipeCallback.java +++ b/library/src/main/java/com/chad/library/adapter/base/callback/ItemDragAndSwipeCallback.java @@ -1,6 +1,7 @@ package com.chad.library.adapter.base.callback; import android.graphics.Canvas; +import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.helper.ItemTouchHelper; import android.view.View; @@ -53,7 +54,7 @@ public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionStat } @Override - public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + public void clearView(@NonNull RecyclerView recyclerView,@NonNull RecyclerView.ViewHolder viewHolder) { super.clearView(recyclerView, viewHolder); if (isViewCreateByAdapter(viewHolder)) { return; @@ -72,7 +73,7 @@ public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHol } @Override - public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { if (isViewCreateByAdapter(viewHolder)) { return makeMovementFlags(0, 0); } @@ -81,30 +82,30 @@ public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder v } @Override - public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder source, RecyclerView.ViewHolder target) { + public boolean onMove(@NonNull RecyclerView recyclerView,@NonNull RecyclerView.ViewHolder source,@NonNull RecyclerView.ViewHolder target) { return source.getItemViewType() == target.getItemViewType(); } @Override - public void onMoved(RecyclerView recyclerView, RecyclerView.ViewHolder source, int fromPos, RecyclerView.ViewHolder target, int toPos, int x, int y) { + public void onMoved(@NonNull RecyclerView recyclerView,@NonNull RecyclerView.ViewHolder source, int fromPos,@NonNull RecyclerView.ViewHolder target, int toPos, int x, int y) { super.onMoved(recyclerView, source, fromPos, target, toPos, x, y); mAdapter.onItemDragMoving(source, target); } @Override - public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { if (!isViewCreateByAdapter(viewHolder)) { mAdapter.onItemSwiped(viewHolder); } } @Override - public float getMoveThreshold(RecyclerView.ViewHolder viewHolder) { + public float getMoveThreshold(@NonNull RecyclerView.ViewHolder viewHolder) { return mMoveThreshold; } @Override - public float getSwipeThreshold(RecyclerView.ViewHolder viewHolder) { + public float getSwipeThreshold(@NonNull RecyclerView.ViewHolder viewHolder) { return mSwipeThreshold; } @@ -142,6 +143,7 @@ public void setMoveThreshold(float moveThreshold) { * * @param dragMoveFlags the drag movement direction. Default value is ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT. */ + public void setDragMoveFlags(int dragMoveFlags) { mDragMoveFlags = dragMoveFlags; } @@ -158,7 +160,7 @@ public void setSwipeMoveFlags(int swipeMoveFlags) { } @Override - public void onChildDrawOver(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, + public void onChildDrawOver(@NonNull Canvas c, @NonNull RecyclerView recyclerView,@NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { super.onChildDrawOver(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); @@ -183,7 +185,7 @@ public void onChildDrawOver(Canvas c, RecyclerView recyclerView, RecyclerView.Vi } } - private boolean isViewCreateByAdapter(RecyclerView.ViewHolder viewHolder) { + private boolean isViewCreateByAdapter(@NonNull RecyclerView.ViewHolder viewHolder) { int type = viewHolder.getItemViewType(); return type == BaseQuickAdapter.HEADER_VIEW || type == BaseQuickAdapter.LOADING_VIEW || type == BaseQuickAdapter.FOOTER_VIEW || type == BaseQuickAdapter.EMPTY_VIEW; From 005b2e0636cfc886820b901d05dc0ddfa62351a9 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 11:50:33 +0800 Subject: [PATCH 04/45] 1.Fix document --- .../adapter/base/callback/ItemDragAndSwipeCallback.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/library/src/main/java/com/chad/library/adapter/base/callback/ItemDragAndSwipeCallback.java b/library/src/main/java/com/chad/library/adapter/base/callback/ItemDragAndSwipeCallback.java index 11dc80fef..635f4dcff 100644 --- a/library/src/main/java/com/chad/library/adapter/base/callback/ItemDragAndSwipeCallback.java +++ b/library/src/main/java/com/chad/library/adapter/base/callback/ItemDragAndSwipeCallback.java @@ -11,7 +11,9 @@ import com.chad.library.adapter.base.BaseQuickAdapter; /** - * Created by luoxw on 2016/6/20. + * + * @author luoxw + * @date 2016/6/20 */ public class ItemDragAndSwipeCallback extends ItemTouchHelper.Callback { From 963692ea08f6596f5019566684a3265833b9ea02 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 11:58:04 +0800 Subject: [PATCH 05/45] 1.add pull request template --- .github/pull_request_template.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..69d168fb1 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,7 @@ +Thank you for contributing to BaseRecyclerViewAdapterHelper. Before pressing the "Create Pull Request" button, please consider the following points: + + - [1] Please give a description about what and why you are contributing, even if it's trivial. + + - [2] Please include the issue list number(s) or other PR numbers in the description if you are contributing in response to those. + + - [3] Please include a reasonable set of demo tests if you contribute new code or change an existing one. please make sure you have demo for working correctly. From 5bde89cf35ba0e4bbd7d7dc1ed08d7b46ade4a99 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 13:57:24 +0800 Subject: [PATCH 06/45] 1.fix circleci build failed --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index abf269e44..d2f1a72da 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,15 +6,15 @@ android: components: - tools - platform-tools - - build-tools-27.0.2 - - android-27 + - build-tools-28.0.3 + - android-28 - extra-android-m2repository - extra-android-support before_install: - chmod +x gradlew - mkdir "$ANDROID_HOME/licenses" || true # Hack to accept Android licenses - - yes | sdkmanager "platforms;android-27" + - yes | sdkmanager "platforms;android-28" script: - ./gradlew assembleRelease From 6959ac34b07388bf46144a2c33d0e13d4ddbdfb2 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 14:06:36 +0800 Subject: [PATCH 07/45] 1.upgrade circleci docker api version --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index c81552d1a..7b1c9af8c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ jobs: build: working_directory: ~/code docker: - - image: circleci/android:api-26-alpha + - image: circleci/android:api-28-alpha environment: JVM_OPTS: -Xmx3200m steps: From f4b3d11297c665f278adcfbcda0461bcb4c446ed Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 14:13:19 +0800 Subject: [PATCH 08/45] 1.move aar to app lib dir --- app/build.gradle | 3 +-- app/libs/material-spinner-1.0.5.aar | Bin 0 -> 37017 bytes 2 files changed, 1 insertion(+), 2 deletions(-) create mode 100644 app/libs/material-spinner-1.0.5.aar diff --git a/app/build.gradle b/app/build.gradle index 73d501ed4..d18f47608 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,9 +24,8 @@ android { } dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs') implementation project(path: ':library') - implementation project(':material-spinner-1.0.5') implementation 'com.android.support:design:28.0.0' implementation 'com.android.support:cardview-v7:28.0.0' implementation 'com.android.support:appcompat-v7:28.0.0' diff --git a/app/libs/material-spinner-1.0.5.aar b/app/libs/material-spinner-1.0.5.aar new file mode 100644 index 0000000000000000000000000000000000000000..95db7c160070279dca579041f5c486f5d8b65ed5 GIT binary patch literal 37017 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 BPg?*0 literal 0 HcmV?d00001 From cea1faf7084cc778d892a588a8a6df60efef82c6 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 14:14:39 +0800 Subject: [PATCH 09/45] 1.delete material spinner moudle --- settings.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.gradle b/settings.gradle index 38cd4b8b0..33069973b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':app', ':library', ':material-spinner-1.0.5' +include ':app', ':library' From 1874eddbd3ea1df92d66b976a6f3b4a9ac7364f8 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 14:15:34 +0800 Subject: [PATCH 10/45] 1.delete unused module --- material-spinner-1.0.5/build.gradle | 2 -- .../material-spinner-1.0.5.aar | Bin 37017 -> 0 bytes 2 files changed, 2 deletions(-) delete mode 100644 material-spinner-1.0.5/build.gradle delete mode 100644 material-spinner-1.0.5/material-spinner-1.0.5.aar diff --git a/material-spinner-1.0.5/build.gradle b/material-spinner-1.0.5/build.gradle deleted file mode 100644 index bcc19a728..000000000 --- a/material-spinner-1.0.5/build.gradle +++ /dev/null @@ -1,2 +0,0 @@ -configurations.maybeCreate("default") -artifacts.add("default", file('material-spinner-1.0.5.aar')) \ No newline at end of file diff --git a/material-spinner-1.0.5/material-spinner-1.0.5.aar b/material-spinner-1.0.5/material-spinner-1.0.5.aar deleted file mode 100644 index 95db7c160070279dca579041f5c486f5d8b65ed5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37017 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 BPg?*0 From 08cb86f936538f664c74684fdc3e1b8853f46dc2 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 14:24:36 +0800 Subject: [PATCH 11/45] 1.delete unused ApplicationTest --- .../ApplicationTest.java | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/app/src/androidTest/java/com/chad/baserecyclerviewadapterhelper/ApplicationTest.java b/app/src/androidTest/java/com/chad/baserecyclerviewadapterhelper/ApplicationTest.java index c03cfebe5..20e425cd2 100644 --- a/app/src/androidTest/java/com/chad/baserecyclerviewadapterhelper/ApplicationTest.java +++ b/app/src/androidTest/java/com/chad/baserecyclerviewadapterhelper/ApplicationTest.java @@ -1,16 +1,8 @@ package com.chad.baserecyclerviewadapterhelper; -import android.app.Application; -import android.test.ApplicationTestCase; - /** * Testing Fundamentals */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } - public void test() { - - } +public class ApplicationTest { + } From 52f0a4395c9d3a27fdd3ee114db11b066cbbc0fc Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 14:27:02 +0800 Subject: [PATCH 12/45] 1.Avoid unused private fields such as 'PAGE_SIZE'. --- .../baserecyclerviewadapterhelper/ItemClickActivity.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemClickActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemClickActivity.java index a8f97b1ea..368dd7573 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemClickActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemClickActivity.java @@ -16,11 +16,13 @@ import java.util.ArrayList; import java.util.List; +/** + * @author Allen + */ public class ItemClickActivity extends BaseActivity { private RecyclerView mRecyclerView; private ItemClickAdapter adapter; - private static final int PAGE_SIZE = 10; private static String TAG = "ItemClickActivity"; @Override @@ -29,7 +31,7 @@ protected void onCreate(Bundle savedInstanceState) { setBackBtn(); setTitle("ItemClickActivity Activity"); setContentView(R.layout.activity_item_click); - mRecyclerView = (RecyclerView) findViewById(R.id.list); + mRecyclerView = findViewById(R.id.list); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); initAdapter(); adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { From c591097d9028dfc753ad08409d8e5bee1681e568 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 14:27:36 +0800 Subject: [PATCH 13/45] 1.Avoid unused imports such as 'android.widget.Toast' --- .../MultipleItemRvAdapterUseActivity.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemRvAdapterUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemRvAdapterUseActivity.java index 099522b98..91cfa3c6c 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemRvAdapterUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemRvAdapterUseActivity.java @@ -3,9 +3,6 @@ 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; From 0e51021be9ff5bc2504aa13ab1a51d51bd4caab5 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 14:47:02 +0800 Subject: [PATCH 14/45] 1.Use explicit scoping instead of the default package private level 2.Perhaps 'mRecyclerView'replaced by a local variable. --- .../MultipleItemUseActivity.java | 4 ++-- .../baserecyclerviewadapterhelper/UpFetchUseActivity.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemUseActivity.java index 9bbfd0606..1a2dc3f11 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/MultipleItemUseActivity.java @@ -18,9 +18,9 @@ /** * https://github.com/CymChad/BaseRecyclerViewAdapterHelper * modify by AllenCoder + * @author ChayChan */ public class MultipleItemUseActivity extends BaseActivity { - private RecyclerView mRecyclerView; @Override protected void onCreate(Bundle savedInstanceState) { @@ -28,7 +28,7 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_multiple_item_use); setTitle("MultipleItem Use"); setBackBtn(); - mRecyclerView = (RecyclerView) findViewById(R.id.rv_list); + RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.rv_list); final List data = DataServer.getMultipleItemData(); final MultipleItemQuickAdapter multipleItemAdapter = new MultipleItemQuickAdapter(this, data); final GridLayoutManager manager = new GridLayoutManager(this, 4); diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/UpFetchUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/UpFetchUseActivity.java index 22f9438e2..10725a38b 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/UpFetchUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/UpFetchUseActivity.java @@ -20,8 +20,8 @@ */ public class UpFetchUseActivity extends BaseActivity { - RecyclerView mRecyclerView; - UpFetchAdapter mAdapter; + private RecyclerView mRecyclerView; + private UpFetchAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { From 6248d69f1b6308ef45ea7db01adc21735f08bce5 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 14:48:56 +0800 Subject: [PATCH 15/45] 1.Fields should be declared at the top of the class, before any method declarations, constructors, initializers or inner classes. --- .../base/BaseActivity.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseActivity.java index 27dd52edc..ef03b5e42 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseActivity.java @@ -29,6 +29,7 @@ public class BaseActivity extends AppCompatActivity { private TextView title; private ImageView back; protected final String TAG = this.getClass().getSimpleName(); + private LinearLayout rootLayout; protected void setTitle(String msg) { if (title != null) { @@ -48,7 +49,7 @@ public void onClick(View v) { finish(); } }); - }else { + } else { Logger.t(TAG).e("back is null ,please check out"); } @@ -58,13 +59,12 @@ protected void setBackClickListener(View.OnClickListener l) { if (back != null) { back.setVisibility(View.VISIBLE); back.setOnClickListener(l); - }else { + } else { Logger.t(TAG).e("back is null ,please check out"); } } - private LinearLayout rootLayout; @Override protected void onCreate(Bundle savedInstanceState) { @@ -103,7 +103,9 @@ public void setContentView(int layoutId) { @Override public void setContentView(View view) { rootLayout = (LinearLayout) findViewById(R.id.root_layout); - if (rootLayout == null) return; + if (rootLayout == null) { + return; + } rootLayout.addView(view, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); initToolbar(); } From 49009cd0e7e361795d581abfe0e6d0de672d6b04 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 14:51:28 +0800 Subject: [PATCH 16/45] 1.fix Generics names should be a one letter long and upper case. --- .../base/BaseBindingViewHolder.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseBindingViewHolder.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseBindingViewHolder.java index e9ed97d0a..454313986 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseBindingViewHolder.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseBindingViewHolder.java @@ -6,23 +6,23 @@ import com.chad.library.adapter.base.BaseViewHolder; /** - * Created by tysheng * Date: 2017/5/11 14:42. * Email: tyshengsx@gmail.com + * @author tysheng */ -public class BaseBindingViewHolder extends BaseViewHolder { - private Binding mBinding; +public class BaseBindingViewHolder extends BaseViewHolder { + private B mB; public BaseBindingViewHolder(View view) { super(view); } - public Binding getBinding() { - return mBinding; + public B getBinding() { + return mB; } - public void setBinding(Binding binding) { - mBinding = binding; + public void setBinding(B b) { + mB = b; } } From 77c9ce90dc575719229ef2c04e875e7c82e69940 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 14:54:37 +0800 Subject: [PATCH 17/45] 1.fix Fields should be declared at the top of the class, before any method declarations, constructors, initializers or inner classes. --- .../util/ToastUtils.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/util/ToastUtils.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/util/ToastUtils.java index ca7b920b2..4b0c451dd 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/util/ToastUtils.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/util/ToastUtils.java @@ -5,16 +5,17 @@ import android.support.annotation.StringRes; import android.widget.Toast; +/** + * @author Allen + */ public class ToastUtils { - private ToastUtils() { - throw new UnsupportedOperationException("u can't instantiate me..."); - } - private static Toast sToast; private static Handler sHandler = new Handler(Looper.getMainLooper()); private static boolean isJumpWhenMore; - + private ToastUtils() { + throw new UnsupportedOperationException("u can't instantiate me..."); + } /** * 吐司初始化 * From 71b0911c5be55961c2765bf088c8e8c803243297 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 15:13:29 +0800 Subject: [PATCH 18/45] 1.Use equals() to compare object references. 2.Fix Fields should be declared at the top of the class, before any method declarations, constructors, initializers or inner classes. --- .../adapter/base/BaseQuickAdapter.java | 43 ++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java index 3a8ee9c7c..30db8818c 100755 --- a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java @@ -15,9 +15,6 @@ */ package com.chad.library.adapter.base; -import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; -import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; - import android.animation.Animator; import android.content.Context; import android.support.annotation.IdRes; @@ -38,6 +35,7 @@ import android.view.animation.LinearInterpolator; import android.widget.FrameLayout; import android.widget.LinearLayout; + import com.chad.library.adapter.base.animation.AlphaInAnimation; import com.chad.library.adapter.base.animation.BaseAnimation; import com.chad.library.adapter.base.animation.ScaleInAnimation; @@ -48,6 +46,7 @@ import com.chad.library.adapter.base.loadmore.LoadMoreView; import com.chad.library.adapter.base.loadmore.SimpleLoadMoreView; import com.chad.library.adapter.base.util.MultiTypeDelegate; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.reflect.Constructor; @@ -59,6 +58,9 @@ import java.util.Collection; import java.util.List; +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; +import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; + /** * https://github.com/CymChad/BaseRecyclerViewAdapterHelper @@ -98,12 +100,6 @@ public abstract class BaseQuickAdapter extends Recy private OnItemLongClickListener mOnItemLongClickListener; private OnItemChildClickListener mOnItemChildClickListener; private OnItemChildLongClickListener mOnItemChildLongClickListener; - - @IntDef({ALPHAIN, SCALEIN, SLIDEIN_BOTTOM, SLIDEIN_LEFT, SLIDEIN_RIGHT}) - @Retention(RetentionPolicy.SOURCE) - public @interface AnimationType { - } - private boolean mFirstOnlyEnable = true; private boolean mOpenAnimationEnable = false; private Interpolator mInterpolator = new LinearInterpolator(); @@ -130,8 +126,19 @@ public abstract class BaseQuickAdapter extends Recy public static final int LOADING_VIEW = 0x00000222; public static final int FOOTER_VIEW = 0x00000333; public static final int EMPTY_VIEW = 0x00000555; - + /** + * up fetch start + */ + private boolean mUpFetchEnable; + private boolean mUpFetching; + private UpFetchListener mUpFetchListener; private RecyclerView mRecyclerView; + private int mPreLoadNumber = 1; + + @IntDef({ALPHAIN, SCALEIN, SLIDEIN_BOTTOM, SLIDEIN_LEFT, SLIDEIN_RIGHT}) + @Retention(RetentionPolicy.SOURCE) + public @interface AnimationType { + } protected RecyclerView getRecyclerView() { return mRecyclerView; @@ -254,12 +261,6 @@ private int getTheBiggestNumber(int[] numbers) { return tmp; } - /** - * up fetch start - */ - private boolean mUpFetchEnable; - private boolean mUpFetching; - private UpFetchListener mUpFetchListener; public void setUpFetchEnable(boolean upFetch) { this.mUpFetchEnable = upFetch; @@ -450,11 +451,13 @@ public void setDuration(int duration) { /** * If you have added headeview, the notification view refreshes. * Do not need to care about the number of headview, only need to pass in the position of the final view + * * @param position */ public final void refreshNotifyItemChanged(int position) { notifyItemChanged(position + getHeaderLayoutCount()); } + /** * Same as QuickAdapter#QuickAdapter(Context,int) but with * some initialization data. @@ -1354,9 +1357,9 @@ public void setEmptyView(int layoutResId, ViewGroup viewGroup) { /** * bind recyclerView {@link #bindToRecyclerView(RecyclerView)} before use! - * Recommend you to use {@link #setEmptyView(layoutResId,viewGroup)} - * @see #bindToRecyclerView(RecyclerView) + * Recommend you to use {@link #setEmptyView(layoutResId, viewGroup)} * + * @see #bindToRecyclerView(RecyclerView) */ @Deprecated public void setEmptyView(int layoutResId) { @@ -1432,7 +1435,6 @@ public View getEmptyView() { return mEmptyLayout; } - private int mPreLoadNumber = 1; @Deprecated public void setAutoLoadMoreSize(int preLoadNumber) { @@ -1570,6 +1572,7 @@ public void openLoadAnimation(BaseAnimation animation) { public void openLoadAnimation() { this.mOpenAnimationEnable = true; } + /** * To close the animation when loading */ @@ -1736,7 +1739,7 @@ public int expandAll(int position, boolean animate, boolean notify) { for (int i = position + 1; i < this.mData.size(); i++) { T item = getItem(i); - if (item == endItem) { + if (item != null && item.equals(endItem)) { break; } if (isExpandable(item)) { From 2f1aea10d713049f99b2ceee9257ca2b4e85b5a3 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 15:25:44 +0800 Subject: [PATCH 19/45] 1.fix avoid throwing certain exception types. Rather than throw a raw RuntimeException, Throwable, Exception, or Error, use a subclassed exception or error instead. --- .../main/java/com/chad/library/adapter/base/BaseViewHolder.java | 2 +- .../com/chad/library/adapter/base/util/MultiTypeDelegate.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseViewHolder.java b/library/src/main/java/com/chad/library/adapter/base/BaseViewHolder.java index 19694df52..85391ae36 100755 --- a/library/src/main/java/com/chad/library/adapter/base/BaseViewHolder.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseViewHolder.java @@ -72,7 +72,7 @@ public Set getNestViews() { /** * Package private field to retain the associated user object and detect a change */ - Object associatedObject; + private Object associatedObject; public BaseViewHolder(final View view) { diff --git a/library/src/main/java/com/chad/library/adapter/base/util/MultiTypeDelegate.java b/library/src/main/java/com/chad/library/adapter/base/util/MultiTypeDelegate.java index 1babeacfe..033676e8c 100644 --- a/library/src/main/java/com/chad/library/adapter/base/util/MultiTypeDelegate.java +++ b/library/src/main/java/com/chad/library/adapter/base/util/MultiTypeDelegate.java @@ -86,7 +86,7 @@ public MultiTypeDelegate registerItemType(int type, @LayoutRes int layoutResId) private void checkMode(boolean mode) { if (mode) { - throw new RuntimeException("Don't mess two register mode"); + throw new IllegalArgumentException("Don't mess two register mode"); } } } From ac461149b84a409c307dab14ee9f5519e378c354 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 15:27:36 +0800 Subject: [PATCH 20/45] 1.Use explicit scoping instead of the default package private level --- .../ExpandableUseActivity.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ExpandableUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ExpandableUseActivity.java index 5afccd64e..3655120d7 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ExpandableUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ExpandableUseActivity.java @@ -18,9 +18,9 @@ * https://github.com/CymChad/BaseRecyclerViewAdapterHelper */ public class ExpandableUseActivity extends BaseActivity { - RecyclerView mRecyclerView; - ExpandableItemAdapter adapter; - ArrayList list; + private RecyclerView mRecyclerView; + private ExpandableItemAdapter adapter; + private ArrayList list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); From 005a1416646adc442f6fc75792bb408d09bd6730 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 15:29:09 +0800 Subject: [PATCH 21/45] 1.replaced by a local variable. --- .../SectionMultipleItemUseActivity.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionMultipleItemUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionMultipleItemUseActivity.java index 4207d4087..4efaeea36 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionMultipleItemUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionMultipleItemUseActivity.java @@ -20,8 +20,6 @@ * 2.create adapter which extend BaseSectionMultiItemQuickAdapter */ public class SectionMultipleItemUseActivity extends BaseActivity { - private RecyclerView mRecyclerView; - private List mData; @Override protected void onCreate(Bundle savedInstanceState) { @@ -29,11 +27,11 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_section_uer); setBackBtn(); setTitle("SectionMultiple Use"); - mRecyclerView = (RecyclerView) findViewById(R.id.rv_list); + RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.rv_list); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); // 1. create entityList which item data extend SectionMultiEntity - mData = DataServer.getSectionMultiData(); + List mData = DataServer.getSectionMultiData(); // create adapter which extend BaseSectionMultiItemQuickAdapter provide your headerResId SectionMultipleItemAdapter sectionAdapter = new SectionMultipleItemAdapter(R.layout.def_section_head, mData); From 367a5e6f2e2d71a36fba673cf34f88cb21787618 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 15:39:11 +0800 Subject: [PATCH 22/45] 1.fix Switch statements should have a default label --- README-cn.md | 6 +++++- .../AnimationUseActivity.java | 2 ++ .../adapter/AnimationAdapter.java | 5 +++-- .../adapter/DataBindingUseAdapter.java | 5 +++-- .../adapter/ExpandableItemAdapter.java | 9 ++++++-- .../adapter/HeaderAndFooterAdapter.java | 12 ++++++----- .../adapter/ItemClickAdapter.java | 2 ++ .../adapter/ItemDragAdapter.java | 5 +++-- .../adapter/MultipleItemQuickAdapter.java | 7 +++++-- .../adapter/NestAdapter.java | 21 ++++++++++--------- .../adapter/PullToRefreshAdapter.java | 21 ++++++++++--------- .../adapter/QuickAdapter.java | 5 +++-- .../adapter/SectionAdapter.java | 6 +++--- .../adapter/SectionMultipleItemAdapter.java | 3 +++ .../adapter/base/loadmore/LoadMoreView.java | 2 ++ .../adapter/base/util/TouchEventUtil.java | 2 ++ 16 files changed, 72 insertions(+), 41 deletions(-) diff --git a/README-cn.md b/README-cn.md index a391ee1e3..4a439591b 100644 --- a/README-cn.md +++ b/README-cn.md @@ -272,6 +272,8 @@ public class MultipleItemQuickAdapter extends BaseMultiItemQuickAdapter data) { protected void convert(final BaseViewHolder holder, final MultiItemEntity item) { switch (holder.getItemViewType()) { case TYPE_LEVEL_0: - switch (holder.getLayoutPosition() % - 3) { + switch (holder.getLayoutPosition() % 3) { case 0: holder.setImageResource(R.id.iv_head, R.mipmap.head_img0); break; @@ -51,6 +52,8 @@ protected void convert(final BaseViewHolder holder, final MultiItemEntity item) case 2: holder.setImageResource(R.id.iv_head, R.mipmap.head_img2); break; + default: + break; } final Level0Item lv0 = (Level0Item) item; holder.setText(R.id.title, lv0.title) @@ -127,6 +130,8 @@ public void onClick(View view) { } }); break; + default: + break; } } } diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/HeaderAndFooterAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/HeaderAndFooterAdapter.java index 3c49c38ab..7d9287dc2 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/HeaderAndFooterAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/HeaderAndFooterAdapter.java @@ -17,16 +17,18 @@ public HeaderAndFooterAdapter(int dataSize) { @Override protected void convert(BaseViewHolder helper, Status item) { - switch (helper.getLayoutPosition()% - 3){ + switch (helper.getLayoutPosition() % + 3) { case 0: - helper.setImageResource(R.id.iv,R.mipmap.animation_img1); + helper.setImageResource(R.id.iv, R.mipmap.animation_img1); break; case 1: - helper.setImageResource(R.id.iv,R.mipmap.animation_img2); + helper.setImageResource(R.id.iv, R.mipmap.animation_img2); break; case 2: - helper.setImageResource(R.id.iv,R.mipmap.animation_img3); + helper.setImageResource(R.id.iv, R.mipmap.animation_img3); + break; + default: break; } } diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/ItemClickAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/ItemClickAdapter.java index 1769b1ca9..1e820a4f1 100755 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/ItemClickAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/ItemClickAdapter.java @@ -61,6 +61,8 @@ protected void convert(final BaseViewHolder helper, final ClickEntity item) { nestAdapter.setOnItemChildClickListener(this); recyclerView.setAdapter(nestAdapter); break; + default: + break; } } diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/ItemDragAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/ItemDragAdapter.java index 613bdb463..15c3465b8 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/ItemDragAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/ItemDragAdapter.java @@ -16,8 +16,7 @@ public ItemDragAdapter(List data) { @Override protected void convert(BaseViewHolder helper, String item) { - switch (helper.getLayoutPosition() % - 3) { + switch (helper.getLayoutPosition() % 3) { case 0: helper.setImageResource(R.id.iv_head, R.mipmap.head_img0); break; @@ -27,6 +26,8 @@ protected void convert(BaseViewHolder helper, String item) { case 2: helper.setImageResource(R.id.iv_head, R.mipmap.head_img2); break; + default: + break; } helper.setText(R.id.tv, item); } diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/MultipleItemQuickAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/MultipleItemQuickAdapter.java index fdf54f7df..a77ec063b 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/MultipleItemQuickAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/MultipleItemQuickAdapter.java @@ -29,17 +29,20 @@ protected void convert(BaseViewHolder helper, MultipleItem item) { helper.setText(R.id.tv, item.getContent()); break; case MultipleItem.IMG_TEXT: - switch (helper.getLayoutPosition() % - 2) { + 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; + default: + break; } break; + default: + break; } } diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/NestAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/NestAdapter.java index 4d452902c..d57ee69ab 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/NestAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/NestAdapter.java @@ -25,28 +25,29 @@ */ public class NestAdapter extends BaseQuickAdapter { public NestAdapter() { - super( R.layout.layout_nest_item, DataServer.getSampleData(20)); + super(R.layout.layout_nest_item, DataServer.getSampleData(20)); } @Override protected void convert(BaseViewHolder helper, Status item) { helper.addOnClickListener(R.id.tweetText); - switch (helper.getLayoutPosition()% - 3){ + switch (helper.getLayoutPosition() % 3) { case 0: - helper.setImageResource(R.id.img,R.mipmap.animation_img1); + helper.setImageResource(R.id.img, R.mipmap.animation_img1); break; case 1: - helper.setImageResource(R.id.img,R.mipmap.animation_img2); + helper.setImageResource(R.id.img, R.mipmap.animation_img2); break; case 2: - helper.setImageResource(R.id.img,R.mipmap.animation_img3); + helper.setImageResource(R.id.img, R.mipmap.animation_img3); + break; + default: break; } - helper.setText(R.id.tweetName,"Hoteis in Rio de Janeiro"); - String msg="\"He was one of Australia's most of distinguished artistes, renowned for his portraits\""; - ( (TextView)helper.getView(R.id.tweetText)).setText(SpannableStringUtils.getBuilder(msg).append("landscapes and nedes").setClickSpan(clickableSpan).create()); - ( (TextView)helper.getView(R.id.tweetText)).setMovementMethod(LinkMovementMethod.getInstance()); + helper.setText(R.id.tweetName, "Hoteis in Rio de Janeiro"); + String msg = "\"He was one of Australia's most of distinguished artistes, renowned for his portraits\""; + ((TextView) helper.getView(R.id.tweetText)).setText(SpannableStringUtils.getBuilder(msg).append("landscapes and nedes").setClickSpan(clickableSpan).create()); + ((TextView) helper.getView(R.id.tweetText)).setMovementMethod(LinkMovementMethod.getInstance()); } ClickableSpan clickableSpan = new ClickableSpan() { diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/PullToRefreshAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/PullToRefreshAdapter.java index ffd564d79..27e59dc7a 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/PullToRefreshAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/PullToRefreshAdapter.java @@ -24,27 +24,28 @@ */ public class PullToRefreshAdapter extends BaseQuickAdapter { public PullToRefreshAdapter() { - super( R.layout.layout_animation, null); + super(R.layout.layout_animation, null); } @Override protected void convert(BaseViewHolder helper, Status item) { - switch (helper.getLayoutPosition()% - 3){ + switch (helper.getLayoutPosition() % 3) { case 0: - helper.setImageResource(R.id.img,R.mipmap.animation_img1); + helper.setImageResource(R.id.img, R.mipmap.animation_img1); break; case 1: - helper.setImageResource(R.id.img,R.mipmap.animation_img2); + helper.setImageResource(R.id.img, R.mipmap.animation_img2); break; case 2: - helper.setImageResource(R.id.img,R.mipmap.animation_img3); + helper.setImageResource(R.id.img, R.mipmap.animation_img3); + break; + default: break; } - helper.setText(R.id.tweetName,"Hoteis in Rio de Janeiro"); - String msg="\"He was one of Australia's most of distinguished artistes, renowned for his portraits\""; - ( (TextView)helper.getView(R.id.tweetText)).setText(SpannableStringUtils.getBuilder(msg).append("landscapes and nedes").setClickSpan(clickableSpan).create()); - ( (TextView)helper.getView(R.id.tweetText)).setMovementMethod(LinkMovementMethod.getInstance()); + helper.setText(R.id.tweetName, "Hoteis in Rio de Janeiro"); + String msg = "\"He was one of Australia's most of distinguished artistes, renowned for his portraits\""; + ((TextView) helper.getView(R.id.tweetText)).setText(SpannableStringUtils.getBuilder(msg).append("landscapes and nedes").setClickSpan(clickableSpan).create()); + ((TextView) helper.getView(R.id.tweetText)).setMovementMethod(LinkMovementMethod.getInstance()); } ClickableSpan clickableSpan = new ClickableSpan() { diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/QuickAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/QuickAdapter.java index a5caa31cb..9bfc4528f 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/QuickAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/QuickAdapter.java @@ -17,8 +17,7 @@ public QuickAdapter(int dataSize) { @Override protected void convert(BaseViewHolder helper, Status item) { - switch (helper.getLayoutPosition() % - 3) { + switch (helper.getLayoutPosition() % 3) { case 0: helper.setImageResource(R.id.img, R.mipmap.animation_img1); break; @@ -28,6 +27,8 @@ protected void convert(BaseViewHolder helper, Status item) { case 2: helper.setImageResource(R.id.img, R.mipmap.animation_img3); break; + default: + break; } helper.setText(R.id.tweetName, "Hoteis in Rio de Janeiro"); helper.setText(R.id.tweetText, "O ever youthful,O ever weeping"); diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/SectionAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/SectionAdapter.java index 60d4d94ef..eee52c3c6 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/SectionAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/SectionAdapter.java @@ -5,7 +5,6 @@ import com.chad.baserecyclerviewadapterhelper.entity.Video; import com.chad.library.adapter.base.BaseSectionQuickAdapter; import com.chad.library.adapter.base.BaseViewHolder; -import com.chad.library.adapter.base.listener.OnItemChildClickListener; import java.util.List; @@ -36,14 +35,15 @@ protected void convertHead(BaseViewHolder helper, final MySection item) { @Override protected void convert(BaseViewHolder helper, MySection item) { Video video = (Video) item.t; - switch (helper.getLayoutPosition() % - 2) { + switch (helper.getLayoutPosition() % 2) { case 0: helper.setImageResource(R.id.iv, R.mipmap.m_img1); break; case 1: helper.setImageResource(R.id.iv, R.mipmap.m_img2); break; + default: + break; } helper.setText(R.id.tv, video.getName()); diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/SectionMultipleItemAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/SectionMultipleItemAdapter.java index e47e4944a..d950829ab 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/SectionMultipleItemAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/SectionMultipleItemAdapter.java @@ -50,7 +50,10 @@ protected void convert(BaseViewHolder helper, SectionMultipleItem item) { case 1: helper.setImageResource(R.id.iv, R.mipmap.animation_img2); break; + default: + break; } + default: break; } } diff --git a/library/src/main/java/com/chad/library/adapter/base/loadmore/LoadMoreView.java b/library/src/main/java/com/chad/library/adapter/base/loadmore/LoadMoreView.java index 1cd65d847..7216d8cdf 100644 --- a/library/src/main/java/com/chad/library/adapter/base/loadmore/LoadMoreView.java +++ b/library/src/main/java/com/chad/library/adapter/base/loadmore/LoadMoreView.java @@ -50,6 +50,8 @@ public void convert(BaseViewHolder holder) { visibleLoadFail(holder, false); visibleLoadEnd(holder, false); break; + default: + break; } } diff --git a/library/src/main/java/com/chad/library/adapter/base/util/TouchEventUtil.java b/library/src/main/java/com/chad/library/adapter/base/util/TouchEventUtil.java index dd0dbe88d..aac645831 100644 --- a/library/src/main/java/com/chad/library/adapter/base/util/TouchEventUtil.java +++ b/library/src/main/java/com/chad/library/adapter/base/util/TouchEventUtil.java @@ -22,6 +22,8 @@ public static String getTouchAction(int actionId) { case MotionEvent.ACTION_OUTSIDE: actionName = "ACTION_OUTSIDE"; break; + default: + break; } return actionName; } From 7ac81cf1cc140100d900b245365f0b70bf6a4943 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 15:49:09 +0800 Subject: [PATCH 23/45] 1.fix throwing raw exception types. --- .../adapter/NestAdapter.java | 2 +- .../base/BaseDataBindingAdapter.java | 20 +++++++++---------- .../adapter/base/BaseQuickAdapter.java | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/NestAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/NestAdapter.java index d57ee69ab..9b0e74f7a 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/NestAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/NestAdapter.java @@ -50,7 +50,7 @@ protected void convert(BaseViewHolder helper, Status item) { ((TextView) helper.getView(R.id.tweetText)).setMovementMethod(LinkMovementMethod.getInstance()); } - ClickableSpan clickableSpan = new ClickableSpan() { + private ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View widget) { ToastUtils.showShortToast("事件触发了 landscapes and nedes"); diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseDataBindingAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseDataBindingAdapter.java index 0fbf329e2..230f253d7 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseDataBindingAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/base/BaseDataBindingAdapter.java @@ -18,7 +18,7 @@ * Email: tyshengsx@gmail.com */ -public abstract class BaseDataBindingAdapter extends BaseQuickAdapter> { +public abstract class BaseDataBindingAdapter extends BaseQuickAdapter> { public BaseDataBindingAdapter(@LayoutRes int layoutResId, @Nullable List data) { @@ -34,29 +34,29 @@ public BaseDataBindingAdapter(@LayoutRes int layoutResId) { } @Override - protected BaseBindingViewHolder createBaseViewHolder(View view) { + protected BaseBindingViewHolder createBaseViewHolder(View view) { return new BaseBindingViewHolder<>(view); } @Override - protected BaseBindingViewHolder createBaseViewHolder(ViewGroup parent, int layoutResId) { - Binding binding = DataBindingUtil.inflate(mLayoutInflater, layoutResId, parent, false); + protected BaseBindingViewHolder createBaseViewHolder(ViewGroup parent, int layoutResId) { + B b = DataBindingUtil.inflate(mLayoutInflater, layoutResId, parent, false); View view; - if (binding == null) { + if (b == null) { view = getItemView(layoutResId, parent); } else { - view = binding.getRoot(); + view = b.getRoot(); } - BaseBindingViewHolder holder = new BaseBindingViewHolder<>(view); - holder.setBinding(binding); + BaseBindingViewHolder holder = new BaseBindingViewHolder<>(view); + holder.setBinding(b); return holder; } @Override - protected void convert(BaseBindingViewHolder helper, T item) { + protected void convert(BaseBindingViewHolder helper, T item) { convert(helper.getBinding(), item); helper.getBinding().executePendingBindings(); } - protected abstract void convert(Binding binding, T item); + protected abstract void convert(B b, T item); } diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java index 30db8818c..478f0a0e6 100755 --- a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java @@ -150,7 +150,7 @@ private void setRecyclerView(RecyclerView recyclerView) { private void checkNotNull() { if (getRecyclerView() == null) { - throw new RuntimeException("please bind recyclerView first!"); + throw new IllegalStateException("please bind recyclerView first!"); } } @@ -159,7 +159,7 @@ private void checkNotNull() { */ public void bindToRecyclerView(RecyclerView recyclerView) { if (getRecyclerView() != null) { - throw new RuntimeException("Don't bind twice"); + throw new IllegalStateException("Don't bind twice"); } setRecyclerView(recyclerView); getRecyclerView().setAdapter(this); From c33cbc66a1539c6e169c7fd1129f0d97c7f21605 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 15:53:26 +0800 Subject: [PATCH 24/45] 1.fix these nested if statements could be combined --- .../adapter/base/BaseQuickAdapter.java | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java index 478f0a0e6..8b80dce68 100755 --- a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java @@ -135,6 +135,16 @@ public abstract class BaseQuickAdapter extends Recy private RecyclerView mRecyclerView; private int mPreLoadNumber = 1; + /** + * start up fetch position, default is 1. + */ + private int mStartUpFetchPosition = 1; + /** + * if asFlow is true, footer/header will arrange like normal item view. + * only works when use {@link GridLayoutManager},and it will ignore span size. + */ + private boolean headerViewAsFlow, footerViewAsFlow; + @IntDef({ALPHAIN, SCALEIN, SLIDEIN_BOTTOM, SLIDEIN_LEFT, SLIDEIN_RIGHT}) @Retention(RetentionPolicy.SOURCE) public @interface AnimationType { @@ -270,10 +280,6 @@ public boolean isUpFetchEnable() { return mUpFetchEnable; } - /** - * start up fetch position, default is 1. - */ - private int mStartUpFetchPosition = 1; public void setStartUpFetchPosition(int startUpFetchPosition) { mStartUpFetchPosition = startUpFetchPosition; @@ -689,7 +695,7 @@ public int getEmptyViewCount() { @Override public int getItemCount() { int count; - if (getEmptyViewCount() == 1) { + if (1 == getEmptyViewCount()) { count = 1; if (mHeadAndEmptyEnable && getHeaderLayoutCount() != 0) { count++; @@ -885,11 +891,6 @@ protected boolean isFixedViewType(int type) { LOADING_VIEW; } - /** - * if asFlow is true, footer/header will arrange like normal item view. - * only works when use {@link GridLayoutManager},and it will ignore span size. - */ - private boolean headerViewAsFlow, footerViewAsFlow; public void setHeaderViewAsFlow(boolean headerViewAsFlow) { this.headerViewAsFlow = headerViewAsFlow; @@ -1383,14 +1384,12 @@ public void setEmptyView(View emptyView) { mEmptyLayout.removeAllViews(); mEmptyLayout.addView(emptyView); mIsUseEmpty = true; - if (insert) { - if (getEmptyViewCount() == 1) { - int position = 0; - if (mHeadAndEmptyEnable && getHeaderLayoutCount() != 0) { - position++; - } - notifyItemInserted(position); + if (insert && getEmptyViewCount() == 1) { + int position = 0; + if (mHeadAndEmptyEnable && getHeaderLayoutCount() != 0) { + position++; } + notifyItemInserted(position); } } From 4f620b4e05c4a05ef3f96854c54d4f64c2779381 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 16:01:24 +0800 Subject: [PATCH 25/45] 1.fix document empty method body --- .../java/com/chad/library/adapter/base/BaseQuickAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java index 8b80dce68..0c9296235 100755 --- a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java @@ -1946,7 +1946,7 @@ public interface OnItemChildLongClickListener { /** * callback method to be invoked when an item in this view has been * click and held - * + * @param adapter this BaseQuickAdapter adapter * @param view The childView whihin the itemView that was clicked and held. * @param position The position of the view int the adapter * @return true if the callback consumed the long click ,false otherwise From 0f3c66eefe4f07359099050ef8b5710c7cf81955 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 16:06:38 +0800 Subject: [PATCH 26/45] 1.fix document empty method body --- .../adapter/base/BaseQuickAdapter.java | 5 ++--- .../base/listener/SimpleClickListener.java | 22 ++++++++++++++----- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java index 0c9296235..043e816c1 100755 --- a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java @@ -1928,9 +1928,8 @@ public int getParentPosition(@NonNull T item) { */ public interface OnItemChildClickListener { /** - * callback method to be invoked when an item in this view has been - * click and held - * + * callback method to be invoked when an itemchild in this view has been click + * @param adapter * @param view The view whihin the ItemView that was clicked * @param position The position of the view int the adapter */ diff --git a/library/src/main/java/com/chad/library/adapter/base/listener/SimpleClickListener.java b/library/src/main/java/com/chad/library/adapter/base/listener/SimpleClickListener.java index 0ad31c3ed..f43d96353 100644 --- a/library/src/main/java/com/chad/library/adapter/base/listener/SimpleClickListener.java +++ b/library/src/main/java/com/chad/library/adapter/base/listener/SimpleClickListener.java @@ -85,7 +85,6 @@ public boolean onDown(MotionEvent e) { @Override public void onShowPress(MotionEvent e) { if (mIsPrepressed && mPressedView != null) { -// mPressedView.setPressed(true); mIsShowPress = true; } } @@ -243,7 +242,7 @@ private void setPressViewHotSpot(final MotionEvent e, final View mPressedView) { /** * Callback method to be invoked when an item in this AdapterView has * been clicked. - * + * @param adapter * @param view The view within the AdapterView that was clicked (this * will be a view provided by the adapter) * @param position The position of the view in the adapter. @@ -253,15 +252,28 @@ private void setPressViewHotSpot(final MotionEvent e, final View mPressedView) { /** * callback method to be invoked when an item in this view has been * click and held - * + * @param adapter * @param view The view whihin the AbsListView that was clicked * @param position The position of the view int the adapter * @return true if the callback consumed the long click ,false otherwise */ public abstract void onItemLongClick(BaseQuickAdapter adapter, View view, int position); - + /** + * callback method to be invoked when an itemchild in this view has been click + * @param adapter + * @param view The view whihin the AbsListView that was clicked + * @param position The position of the view int the adapter + * @return true if the callback consumed the long click ,false otherwise + */ public abstract void onItemChildClick(BaseQuickAdapter adapter, View view, int position); - + /** + * callback method to be invoked when an item in this view has been + * click and held + * @param adapter + * @param view The view whihin the AbsListView that was clicked + * @param position The position of the view int the adapter + * @return true if the callback consumed the long click ,false otherwise + */ public abstract void onItemChildLongClick(BaseQuickAdapter adapter, View view, int position); public boolean inRangeOfView(View view, MotionEvent ev) { From cb03f45bdfd4759acd03794aea7f992f6700f888 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 20 Feb 2019 17:38:37 +0800 Subject: [PATCH 27/45] 1.fix checkstyle issue --- .../AnimationUseActivity.java | 8 ++++---- .../EmptyViewUseActivity.java | 6 +++--- .../ItemDragAndSwipeUseActivity.java | 15 +++++---------- .../adapter/AnimationAdapter.java | 2 +- .../adapter/ItemClickAdapter.java | 5 +++-- .../library/adapter/base/BaseQuickAdapter.java | 9 +++++---- 6 files changed, 21 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/AnimationUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/AnimationUseActivity.java index d81ce7013..017345df7 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/AnimationUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/AnimationUseActivity.java @@ -24,8 +24,6 @@ public class AnimationUseActivity extends Activity { private RecyclerView mRecyclerView; private AnimationAdapter mAnimationAdapter; - private ImageView mImgBtn; - private int mFirstPageItemCount = 3; @Override protected void onCreate(Bundle savedInstanceState) { @@ -41,7 +39,7 @@ protected void onCreate(Bundle savedInstanceState) { private void initView() { - mImgBtn = (ImageView) findViewById(R.id.img_back); + ImageView mImgBtn = (ImageView) findViewById(R.id.img_back); mImgBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View v) { @@ -53,6 +51,7 @@ public void onClick(final View v) { private void initAdapter() { mAnimationAdapter = new AnimationAdapter(); mAnimationAdapter.openLoadAnimation(); + int mFirstPageItemCount = 3; mAnimationAdapter.setNotDoAnimationCount(mFirstPageItemCount); mAnimationAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() { @Override @@ -114,7 +113,8 @@ public void onItemSelected(MaterialSpinner view, int position, long id, String i mRecyclerView.setAdapter(mAnimationAdapter); } }); - mAnimationAdapter.isFirstOnly(false);//init firstOnly state + //init firstOnly state + mAnimationAdapter.isFirstOnly(false); SwitchButton switchButton = (SwitchButton) findViewById(R.id.switch_button); switchButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/EmptyViewUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/EmptyViewUseActivity.java index 59b01d54b..d474a7adf 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/EmptyViewUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/EmptyViewUseActivity.java @@ -16,7 +16,8 @@ public class EmptyViewUseActivity extends BaseActivity implements View.OnClickLi private QuickAdapter mQuickAdapter; private View notDataView; private View errorView; - + private boolean mError = true; + private boolean mNoData = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -59,8 +60,7 @@ public void onClick(View v) { onRefresh(); } - private boolean mError = true; - private boolean mNoData = true; + private void onRefresh() { mQuickAdapter.setEmptyView(R.layout.loading_view, (ViewGroup) mRecyclerView.getParent()); diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemDragAndSwipeUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemDragAndSwipeUseActivity.java index 9d9abcb52..d39a9f2e9 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemDragAndSwipeUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemDragAndSwipeUseActivity.java @@ -28,11 +28,6 @@ */ public class ItemDragAndSwipeUseActivity extends BaseActivity { private static final String TAG = ItemDragAndSwipeUseActivity.class.getSimpleName(); - private RecyclerView mRecyclerView; - private List mData; - private ItemDragAdapter mAdapter; - private ItemTouchHelper mItemTouchHelper; - private ItemDragAndSwipeCallback mItemDragAndSwipeCallback; @Override protected void onCreate(Bundle savedInstanceState) { @@ -40,9 +35,9 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_item_touch_use); setBackBtn(); setTitle("ItemDrag And Swipe"); - mRecyclerView = (RecyclerView) findViewById(R.id.rv_list); + RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.rv_list); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); - mData = generateData(50); + List mData = generateData(50); OnItemDragListener listener = new OnItemDragListener() { @Override public void onItemDragStart(RecyclerView.ViewHolder viewHolder, int pos) { @@ -94,9 +89,9 @@ public void onItemSwipeMoving(Canvas canvas, RecyclerView.ViewHolder viewHolder, } }; - mAdapter = new ItemDragAdapter(mData); - mItemDragAndSwipeCallback = new ItemDragAndSwipeCallback(mAdapter); - mItemTouchHelper = new ItemTouchHelper(mItemDragAndSwipeCallback); + ItemDragAdapter mAdapter = new ItemDragAdapter(mData); + ItemDragAndSwipeCallback mItemDragAndSwipeCallback = new ItemDragAndSwipeCallback(mAdapter); + ItemTouchHelper mItemTouchHelper = new ItemTouchHelper(mItemDragAndSwipeCallback); mItemTouchHelper.attachToRecyclerView(mRecyclerView); //mItemDragAndSwipeCallback.setDragMoveFlags(ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT | ItemTouchHelper.UP | ItemTouchHelper.DOWN); diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/AnimationAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/AnimationAdapter.java index 34f0453ea..33d2a5813 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/AnimationAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/AnimationAdapter.java @@ -53,7 +53,7 @@ protected void convert(BaseViewHolder helper, Status item) { ((TextView) helper.getView(R.id.tweetText)).setLongClickable(false); } - ClickableSpan clickableSpan = new ClickableSpan() { + private ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View widget) { ToastUtils.showShortToast("事件触发了 landscapes and nedes"); diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/ItemClickAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/ItemClickAdapter.java index 1e820a4f1..d23ed4e65 100755 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/ItemClickAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/ItemClickAdapter.java @@ -19,7 +19,7 @@ * */ public class ItemClickAdapter extends BaseMultiItemQuickAdapter implements BaseQuickAdapter.OnItemClickListener, BaseQuickAdapter.OnItemChildClickListener { - NestAdapter nestAdapter; + private NestAdapter nestAdapter; public ItemClickAdapter(List data) { super(data); @@ -51,7 +51,8 @@ protected void convert(final BaseViewHolder helper, final ClickEntity item) { .addOnClickListener(R.id.iv_num_reduce).addOnClickListener(R.id.iv_num_add); break; case ClickEntity.NEST_CLICK_ITEM_CHILD_VIEW: - helper.setNestView(R.id.item_click); // u can set nestview id + // u can set nestview id + helper.setNestView(R.id.item_click); final RecyclerView recyclerView = helper.getView(R.id.nest_list); recyclerView.setLayoutManager(new LinearLayoutManager(helper.itemView.getContext(), LinearLayoutManager.VERTICAL, false)); recyclerView.setHasFixedSize(true); diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java index 043e816c1..02291e1d3 100755 --- a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java @@ -1152,7 +1152,7 @@ public int addHeaderView(View header, int index) { * @param index * @param orientation */ - public int addHeaderView(View header, int index, int orientation) { + public int addHeaderView(View header,final int index, int orientation) { if (mHeaderLayout == null) { mHeaderLayout = new LinearLayout(header.getContext()); if (orientation == LinearLayout.VERTICAL) { @@ -1164,17 +1164,18 @@ public int addHeaderView(View header, int index, int orientation) { } } final int childCount = mHeaderLayout.getChildCount(); + int mIndex =index; if (index < 0 || index > childCount) { - index = childCount; + mIndex = childCount; } - mHeaderLayout.addView(header, index); + mHeaderLayout.addView(header, mIndex); if (mHeaderLayout.getChildCount() == 1) { int position = getHeaderViewPosition(); if (position != -1) { notifyItemInserted(position); } } - return index; + return mIndex; } public int setHeaderView(View header) { From d6521ee49e749f790152097970912dafafafc11c Mon Sep 17 00:00:00 2001 From: Allen Date: Fri, 22 Feb 2019 16:16:06 +0800 Subject: [PATCH 28/45] 1.fix https://github.com/CymChad/BaseRecyclerViewAdapterHelper/issues/2655 --- .../baserecyclerviewadapterhelper/ExpandableUseActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ExpandableUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ExpandableUseActivity.java index 3655120d7..f68652791 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ExpandableUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ExpandableUseActivity.java @@ -67,7 +67,7 @@ private ArrayList generateData() { } res.add(lv0); } - res.add(new Level0Item("This is " + lv0Count + "th item in Level 0", "subtitle of " + lv0Count)); + return res; } } From 70cecccb309f04e1009474940e6ba15fd4a247e2 Mon Sep 17 00:00:00 2001 From: renpeng Date: Wed, 29 May 2019 14:25:29 +0800 Subject: [PATCH 29/45] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B9=8B=E5=89=8D?= =?UTF-8?q?=E6=9D=A5=E5=9B=9E=E6=8B=96=E5=8A=A8=E5=90=8E=E5=AF=B9section?= =?UTF-8?q?=E5=8C=BA=E9=97=B4=E8=AE=A1=E7=AE=97=E5=87=BA=E9=94=99=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SectionUseActivity.java | 4 +- .../GridSectionAverageGapItemDecoration.java | 160 +++++++++++++----- 2 files changed, 124 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionUseActivity.java index 15b9f6372..476ee7d87 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/SectionUseActivity.java @@ -29,8 +29,8 @@ protected void onCreate(Bundle savedInstanceState) { setBackBtn(); setTitle("Section Use"); mRecyclerView = (RecyclerView) findViewById(R.id.rv_list); - mRecyclerView.setLayoutManager(new GridLayoutManager(this,2)); - mRecyclerView.addItemDecoration(new GridSectionAverageGapItemDecoration(50,20,20,20)); + mRecyclerView.setLayoutManager(new GridLayoutManager(this,3)); + mRecyclerView.addItemDecoration(new GridSectionAverageGapItemDecoration(10,10,20,15)); mData = DataServer.getSampleData(); SectionAdapter sectionAdapter = new SectionAdapter(R.layout.item_section_content, R.layout.def_section_head, mData); diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridSectionAverageGapItemDecoration.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridSectionAverageGapItemDecoration.java index b265248cc..a650e4f75 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridSectionAverageGapItemDecoration.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridSectionAverageGapItemDecoration.java @@ -2,28 +2,51 @@ import android.graphics.Rect; import android.os.Build; +import android.support.annotation.Nullable; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.View; -import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseSectionQuickAdapter; import com.chad.library.adapter.base.BaseViewHolder; import com.chad.library.adapter.base.entity.SectionEntity; +import java.util.ArrayList; +import java.util.List; + /** * 应用于RecyclerView的GridLayoutManager,水平方向上固定间距大小,从而使条目宽度自适应。
* 配合Brvah的Section使用,不对Head生效,仅对每个Head的子Grid列表生效
- *Section Grid中Item的宽度应设为MATCH_PARAENT + * Section Grid中Item的宽度应设为MATCH_PARAENT * * @author : renpeng - * @org :Aurora Team * @since : 2018/9/29 */ public class GridSectionAverageGapItemDecoration extends RecyclerView.ItemDecoration { + private class Section { + public int startPos = 0; + public int endPos = 0; + + public int getCount() { + return endPos - startPos + 1; + } + + public boolean contains(int pos) { + return pos >= startPos && pos <= endPos; + } + + @Override + public String toString() { + return "Section{" + + "startPos=" + startPos + + ", endPos=" + endPos + + '}'; + } + } + private float gapHorizontalDp; private float gapVerticalDp; private float sectionEdgeHPaddingDp; @@ -34,16 +57,46 @@ public class GridSectionAverageGapItemDecoration extends RecyclerView.ItemDecora private int eachItemHPaddingPx; //每个条目应该在水平方向上加的padding 总大小,即=paddingLeft+paddingRight private int sectionEdgeVPaddingPx; private Rect preRect = new Rect(); - private boolean isPreItemHeader = false; - private int sectionStartItemPos = 0; - private int sectionEndItemPos = 0; - private int sectionItemCount = 0; + private List
mSectionList = new ArrayList<>(); + private BaseSectionQuickAdapter mAdapter; + private RecyclerView.AdapterDataObserver mDataObserver = new RecyclerView.AdapterDataObserver() { + @Override + public void onChanged() { + markSections(); + } + + @Override + public void onItemRangeChanged(int positionStart, int itemCount) { + markSections(); + } + + @Override + public void onItemRangeChanged(int positionStart, int itemCount, @Nullable Object payload) { + markSections(); + } + + @Override + public void onItemRangeInserted(int positionStart, int itemCount) { + markSections(); + } + + @Override + public void onItemRangeRemoved(int positionStart, int itemCount) { + markSections(); + } + + @Override + public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) { + markSections(); + } + }; + /** - * @param gapHorizontalDp 水平间距 - * @param gapVerticalDp 垂直间距 - * @param sectionEdgeHPaddingDp 左右两端的padding大小 - * @param sectionEdgeVPaddingDp 上下两端的padding大小 + * @param gapHorizontalDp item之间的水平间距 + * @param gapVerticalDp item之间的垂直间距 + * @param sectionEdgeHPaddingDp section左右两端的padding大小 + * @param sectionEdgeVPaddingDp section上下两端的padding大小 */ public GridSectionAverageGapItemDecoration(float gapHorizontalDp, float gapVerticalDp, float sectionEdgeHPaddingDp, float sectionEdgeVPaddingDp) { this.gapHorizontalDp = gapHorizontalDp; @@ -57,24 +110,22 @@ public void getItemOffsets(Rect outRect, View view, RecyclerView parent, Recycle if (parent.getLayoutManager() instanceof GridLayoutManager && parent.getAdapter() instanceof BaseSectionQuickAdapter) { GridLayoutManager layoutManager = (GridLayoutManager) parent.getLayoutManager(); BaseSectionQuickAdapter adapter = (BaseSectionQuickAdapter) parent.getAdapter(); + if (mAdapter != adapter) { + setUpWithAdapter(adapter); + } int spanCount = layoutManager.getSpanCount(); int position = parent.getChildAdapterPosition(view); SectionEntity entity = adapter.getItem(position); if (entity != null && entity.isHeader) { //不处理header - isPreItemHeader = true; - outRect.set(0,0,0,0); + outRect.set(0, 0, 0, 0); + preRect = new Rect(outRect); // Log.w("GridAverageGapItem", "pos=" + position + "," + outRect.toShortString()); return; } - if (isPreItemHeader) { - sectionStartItemPos = position; - sectionEndItemPos = findSectionLastItemPos(position, adapter); - sectionItemCount = sectionEndItemPos - sectionStartItemPos + 1; -// Log.w("GridAverageGapItem", "new section=" + sectionStartItemPos + "-" + sectionEndItemPos); - } + Section section = findSectionLastItemPos(position); if (gapHSizePx < 0 || gapVSizePx < 0) { transformGapDefinition(parent, spanCount); @@ -83,11 +134,12 @@ public void getItemOffsets(Rect outRect, View view, RecyclerView parent, Recycle outRect.bottom = 0; //下面的visualPos为单个Section内的视觉Pos - int visualPos = position + 1 - sectionStartItemPos; + int visualPos = position + 1 - section.startPos; if (visualPos % spanCount == 1) { //第一列 outRect.left = sectionEdgeHPaddingPx; outRect.right = eachItemHPaddingPx - sectionEdgeHPaddingPx; + preRect.setEmpty(); } else if (visualPos % spanCount == 0) { //最后一列 outRect.left = eachItemHPaddingPx - sectionEdgeHPaddingPx; @@ -98,22 +150,60 @@ public void getItemOffsets(Rect outRect, View view, RecyclerView parent, Recycle } if (visualPos - spanCount <= 0) { - //每个section的第一行 + //第一行 outRect.top = sectionEdgeVPaddingPx; } - //存在即是第一行,又是最后一行的情况,故不用elseif - if (isLastRow(visualPos, spanCount, sectionItemCount)) { - //每个section的最后一行 + + if (isLastRow(visualPos, spanCount, section.getCount())) { + //最后一行 outRect.bottom = sectionEdgeVPaddingPx; +// Log.w("GridAverageGapItem", "last row pos=" + position); } - preRect = new Rect(outRect); - isPreItemHeader = false; -// Log.w("GridAverageGapItem", "pos=" + position + "," + outRect.toShortString()); +// Log.w("GridAverageGapItem", "pos=" + position + ",vPos=" + visualPos + "," + outRect.toShortString()); } else { super.getItemOffsets(outRect, view, parent, state); } } + private void setUpWithAdapter(BaseSectionQuickAdapter adapter) { + if (mAdapter != null) { + mAdapter.unregisterAdapterDataObserver(mDataObserver); + } + mAdapter = adapter; + mAdapter.registerAdapterDataObserver(mDataObserver); + markSections(); + } + + private void markSections() { + if (mAdapter != null) { + BaseSectionQuickAdapter adapter = mAdapter; + mSectionList.clear(); + SectionEntity sectionEntity = null; + Section section = new Section(); + for (int i = 0, size = adapter.getItemCount(); i < size; i++) { + sectionEntity = adapter.getItem(i); + if (sectionEntity != null && sectionEntity.isHeader) { + //找到新Section起点 + if (section != null && i != 0) { + //已经有待添加的section + section.endPos = i - 1; + mSectionList.add(section); + } + section = new Section(); + section.startPos = i + 1; + } else { + section.endPos = i; + } + } + //处理末尾情况 + if (!mSectionList.contains(section)) { + mSectionList.add(section); + } + +// Log.w("GridAverageGapItem", "section list=" + mSectionList); + } + } + private void transformGapDefinition(RecyclerView parent, int spanCount) { DisplayMetrics displayMetrics = new DisplayMetrics(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { @@ -126,19 +216,13 @@ private void transformGapDefinition(RecyclerView parent, int spanCount) { eachItemHPaddingPx = (sectionEdgeHPaddingPx * 2 + gapHSizePx * (spanCount - 1)) / spanCount; } - private int findSectionLastItemPos(int curPos, BaseQuickAdapter adapter) { - int count = adapter.getItemCount(); - if (count == curPos + 1) { - return curPos; - } - SectionEntity sectionEntity = null; - for (int i = curPos + 1; i < count; i++) { - sectionEntity = adapter.getItem(i); - if (sectionEntity != null && sectionEntity.isHeader) { - return i - 1; + private Section findSectionLastItemPos(int curPos) { + for (Section section : mSectionList) { + if (section.contains(curPos)) { + return section; } } - return count - 1; + return null; } private boolean isLastRow(int visualPos, int spanCount, int sectionItemCount) { From 1c2d0a1ddea32c39c069ff2ade41384be76305b3 Mon Sep 17 00:00:00 2001 From: renpeng Date: Wed, 29 May 2019 16:59:28 +0800 Subject: [PATCH 30/45] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=9D=A1=E7=9B=AE?= =?UTF-8?q?=E7=BC=A9=E8=BF=9B=E8=AE=A1=E7=AE=97=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../decoration/GridSectionAverageGapItemDecoration.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridSectionAverageGapItemDecoration.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridSectionAverageGapItemDecoration.java index a650e4f75..ab86ca142 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridSectionAverageGapItemDecoration.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridSectionAverageGapItemDecoration.java @@ -56,7 +56,6 @@ public String toString() { private int sectionEdgeHPaddingPx; private int eachItemHPaddingPx; //每个条目应该在水平方向上加的padding 总大小,即=paddingLeft+paddingRight private int sectionEdgeVPaddingPx; - private Rect preRect = new Rect(); private List
mSectionList = new ArrayList<>(); private BaseSectionQuickAdapter mAdapter; private RecyclerView.AdapterDataObserver mDataObserver = new RecyclerView.AdapterDataObserver() { @@ -120,7 +119,6 @@ public void getItemOffsets(Rect outRect, View view, RecyclerView parent, Recycle if (entity != null && entity.isHeader) { //不处理header outRect.set(0, 0, 0, 0); - preRect = new Rect(outRect); // Log.w("GridAverageGapItem", "pos=" + position + "," + outRect.toShortString()); return; } @@ -139,13 +137,12 @@ public void getItemOffsets(Rect outRect, View view, RecyclerView parent, Recycle //第一列 outRect.left = sectionEdgeHPaddingPx; outRect.right = eachItemHPaddingPx - sectionEdgeHPaddingPx; - preRect.setEmpty(); } else if (visualPos % spanCount == 0) { //最后一列 outRect.left = eachItemHPaddingPx - sectionEdgeHPaddingPx; outRect.right = sectionEdgeHPaddingPx; } else { - outRect.left = gapHSizePx - preRect.right; + outRect.left = gapHSizePx - (eachItemHPaddingPx - sectionEdgeHPaddingPx); outRect.right = eachItemHPaddingPx - outRect.left; } From 465a4ebbc202e273fd16fc2028df59d0cf07c6f2 Mon Sep 17 00:00:00 2001 From: renpeng Date: Fri, 31 May 2019 09:06:38 +0800 Subject: [PATCH 31/45] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=92=88=E5=AF=B9BaseS?= =?UTF-8?q?ectionMultiItemQuickAdapter=E7=9A=84=E9=97=B4=E8=B7=9D=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GridSectionMultiAvgGapItemDecoration.java | 289 ++++++++++++++++++ 1 file changed, 289 insertions(+) create mode 100644 app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridSectionMultiAvgGapItemDecoration.java diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridSectionMultiAvgGapItemDecoration.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridSectionMultiAvgGapItemDecoration.java new file mode 100644 index 000000000..bf94980f7 --- /dev/null +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/decoration/GridSectionMultiAvgGapItemDecoration.java @@ -0,0 +1,289 @@ +package com.chad.baserecyclerviewadapterhelper.decoration; + +import android.graphics.Rect; +import android.os.Build; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.DisplayMetrics; +import android.util.Log; +import android.util.LongSparseArray; +import android.util.TypedValue; +import android.view.View; + +import com.chad.library.adapter.base.BaseSectionMultiItemQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.chad.library.adapter.base.entity.SectionMultiEntity; + +import java.util.ArrayList; +import java.util.List; + +/** + * 应用于RecyclerView的GridLayoutManager,水平方向上固定间距大小,从而使条目宽度自适应。
+ * 配合Brvah的SectionMulti使用,不对Head生效,仅对每个Head的子Grid列表生效
+ * 使用{@link #addSectionDecoration(int, SectionDecoration)}方法来增加对应的section定义,key值对应{@link SectionMultiEntity#getItemType()}
+ * 使用{@link #setLastSectionBottomMarginDp(float)}来定义最后一个section中最后一行的底部间距,设置后会覆盖最后一个section的底部间距
+ * Section Grid中Item的宽度应设为MATCH_PARAENT
+ * + * @author : renpeng + * @since : 2019/5/28 + */ +@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) +public class GridSectionMultiAvgGapItemDecoration extends RecyclerView.ItemDecoration { + + private class Section { + public int startPos = 0; + public int endPos = 0; + + public int getCount() { + return endPos - startPos + 1; + } + + public boolean contains(int pos) { + return pos >= startPos && pos <= endPos; + } + + @Override + public String toString() { + return "Section{" + + "startPos=" + startPos + + ", endPos=" + endPos + + '}'; + } + } + + public static class SectionDecoration { + private float gapHorizontalDp; + private float gapVerticalDp; + private float sectionEdgeHPaddingDp; + private float sectionTopMarginDp; + private float sectionBottomMarginDp; + private int gapHSizePx = -1; + private int gapVSizePx = -1; + private int sectionEdgeHPaddingPx; + private int eachItemHPaddingPx; //每个条目应该在水平方向上加的padding 总大小,即=paddingLeft+paddingRight + private int sectionTopMarginPx; + private int sectionBottomMarginPx; + + /** + * @param gapHorizontalDp item之间的水平间距 + * @param gapVerticalDp item之间的垂直间距 + * @param sectionEdgeHPaddingDp section左右两端的padding大小 + * @param sectionEdgeVMarginDp section上下两端的margin大小 + */ + public SectionDecoration(float gapHorizontalDp, float gapVerticalDp, float sectionEdgeHPaddingDp, float sectionEdgeVMarginDp) { + this(gapHorizontalDp,gapVerticalDp,sectionEdgeHPaddingDp,sectionEdgeVMarginDp,sectionEdgeVMarginDp); + } + + /** + * @param gapHorizontalDp item之间的水平间距 + * @param gapVerticalDp item之间的垂直间距 + * @param sectionEdgeHPaddingDp section左右两端的padding大小 + * @param sectionTopMarginDp section的top margin大小 + * @param sectionBottomMarginDp section的bottom margin大小 + */ + public SectionDecoration(float gapHorizontalDp, float gapVerticalDp, float sectionEdgeHPaddingDp, float sectionTopMarginDp,float sectionBottomMarginDp) { + this.gapHorizontalDp = gapHorizontalDp; + this.gapVerticalDp = gapVerticalDp; + this.sectionEdgeHPaddingDp = sectionEdgeHPaddingDp; + this.sectionTopMarginDp = sectionTopMarginDp; + this.sectionBottomMarginDp = sectionBottomMarginDp; + } + + private void transformGapDefinition(RecyclerView parent, int spanCount) { + if(gapHSizePx < 0){ + DisplayMetrics displayMetrics = new DisplayMetrics(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + parent.getDisplay().getMetrics(displayMetrics); + } + gapHSizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, gapHorizontalDp, displayMetrics); + gapVSizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, gapVerticalDp, displayMetrics); + sectionEdgeHPaddingPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, sectionEdgeHPaddingDp, displayMetrics); + sectionTopMarginPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, sectionTopMarginDp, displayMetrics); + sectionBottomMarginPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, sectionBottomMarginDp, displayMetrics); + eachItemHPaddingPx = (sectionEdgeHPaddingPx * 2 + gapHSizePx * (spanCount - 1)) / spanCount; + } + } + + } + + + private List
mSectionList = new ArrayList<>(); + private LongSparseArray sectionDecorationMap = new LongSparseArray<>(); + private BaseSectionMultiItemQuickAdapter baseMultiItemQuickAdapter; + //最后一个Section的BottomMargin,在计算最后一个seciton的底部间距时,会替换掉相应sectionDecoration中的定义 + private float mLastSectionBottomMarginDp = -1; + private int mLastSectionBottomMarginPx = -1; + private RecyclerView.AdapterDataObserver mDataObserver = new RecyclerView.AdapterDataObserver() { + @Override + public void onChanged() { + markSectionsForMultiSectionAdapter(); + } + + @Override + public void onItemRangeChanged(int positionStart, int itemCount) { + markSectionsForMultiSectionAdapter(); + } + + @Override + public void onItemRangeChanged(int positionStart, int itemCount, @Nullable Object payload) { + markSectionsForMultiSectionAdapter(); + } + + @Override + public void onItemRangeInserted(int positionStart, int itemCount) { + markSectionsForMultiSectionAdapter(); + } + + @Override + public void onItemRangeRemoved(int positionStart, int itemCount) { + markSectionsForMultiSectionAdapter(); + } + + @Override + public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) { + markSectionsForMultiSectionAdapter(); + } + }; + + public float getLastSectionBottomMarginDp() { + return mLastSectionBottomMarginDp; + } + + public void setLastSectionBottomMarginDp(float lastSectionBottomMarginDp) { + if(lastSectionBottomMarginDp < 0){ + throw new IllegalArgumentException("mLastSectionBottomMarginDp must >=0!"); + } + this.mLastSectionBottomMarginDp = lastSectionBottomMarginDp; + } + + public void addSectionDecoration(int type, @NonNull SectionDecoration sectionDecoration){ + if(sectionDecorationMap.get(type) != null){ + throw new RuntimeException(String.format("SectionDecoration for %d already exist!",type)); + } + sectionDecorationMap.put(type,sectionDecoration); + } + + + @Override + public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { + if (parent.getAdapter() instanceof BaseSectionMultiItemQuickAdapter) { + GridLayoutManager layoutManager = (GridLayoutManager) parent.getLayoutManager(); + BaseSectionMultiItemQuickAdapter adapter = (BaseSectionMultiItemQuickAdapter) parent.getAdapter(); + if (baseMultiItemQuickAdapter != adapter) { + setUpWithMultiItemAdapter(adapter); + } + int spanCount = layoutManager.getSpanCount(); + int position = parent.getChildAdapterPosition(view); + SectionMultiEntity entity = adapter.getItem(position); + + SectionDecoration sectionDecoration = entity != null ? sectionDecorationMap.get(entity.getItemType()) : null; + if ((entity != null && entity.isHeader) || sectionDecoration == null) { + //不处理header + outRect.set(0, 0, 0, 0); +// Log.w("GridAverageGapItem", "pos=" + position + "," + outRect.toShortString()); + return; + } + if(mLastSectionBottomMarginDp >=0){ + mLastSectionBottomMarginPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mLastSectionBottomMarginDp, parent.getResources().getDisplayMetrics()); + } + sectionDecoration.transformGapDefinition(parent,spanCount); + Section section = findSectionByPosition(position); + + outRect.top = sectionDecoration.gapVSizePx; + outRect.bottom = 0; + + //下面的visualPos为单个Section内的视觉Pos + int visualPos = position + 1 - section.startPos; + if (visualPos % spanCount == 1) { + //第一列 + outRect.left = sectionDecoration.sectionEdgeHPaddingPx; + outRect.right = sectionDecoration.eachItemHPaddingPx - sectionDecoration.sectionEdgeHPaddingPx; + } else if (visualPos % spanCount == 0) { + //最后一列 + outRect.left = sectionDecoration.eachItemHPaddingPx - sectionDecoration.sectionEdgeHPaddingPx; + outRect.right = sectionDecoration.sectionEdgeHPaddingPx; + } else { + outRect.left = sectionDecoration.gapHSizePx - (sectionDecoration.eachItemHPaddingPx - sectionDecoration.sectionEdgeHPaddingPx); + outRect.right = sectionDecoration.eachItemHPaddingPx - outRect.left; + } + + if (visualPos - spanCount <= 0) { + //第一行 + outRect.top = sectionDecoration.sectionTopMarginPx; + } + + if (isLastRow(visualPos, spanCount, section.getCount())) { + //最后一行 + if(mLastSectionBottomMarginPx >= 0 && mSectionList.indexOf(section) == mSectionList.size()-1){ + //最后一个section + outRect.bottom = mLastSectionBottomMarginPx; + }else{ + outRect.bottom = sectionDecoration.sectionBottomMarginPx; + } +// Log.w("GridAverageGapItem", "last row " + position); + } +// Log.w("GridAverageGapItem", "pos=" + position + ",vPos=" + visualPos + "," + outRect.toShortString()); + } else { + super.getItemOffsets(outRect, view, parent, state); + } + + } + + private void setUpWithMultiItemAdapter(BaseSectionMultiItemQuickAdapter adapter) { + if (baseMultiItemQuickAdapter != null) { + baseMultiItemQuickAdapter.unregisterAdapterDataObserver(mDataObserver); + } + baseMultiItemQuickAdapter = adapter; + baseMultiItemQuickAdapter.registerAdapterDataObserver(mDataObserver); + markSectionsForMultiSectionAdapter(); + } + + private void markSectionsForMultiSectionAdapter() { + if (baseMultiItemQuickAdapter != null) { + BaseSectionMultiItemQuickAdapter adapter = baseMultiItemQuickAdapter; + mSectionList.clear(); + SectionMultiEntity sectionEntity = null; + Section section = new Section(); + for (int i = 0, size = adapter.getItemCount(); i < size; i++) { + sectionEntity = adapter.getItem(i); + if (sectionEntity != null && sectionEntity.isHeader) { + //找到新Section起点 + if (section != null && i != 0 && section.startPos != i) { + //已经有待添加的section + section.endPos = i - 1; + mSectionList.add(section); + } + section = new Section(); + section.startPos = i + 1; + } else { + section.endPos = i; + } + } + //处理末尾情况 + if (!mSectionList.contains(section)) { + mSectionList.add(section); + } + + Log.w("GridAverageGapItem", "section list=" + mSectionList); + } + } + + + private Section findSectionByPosition(int curPos) { + for (Section section : mSectionList) { + if (section.contains(curPos)) { + return section; + } + } + return null; + } + + private boolean isLastRow(int visualPos, int spanCount, int sectionItemCount) { + int lastRowCount = sectionItemCount % spanCount; + lastRowCount = lastRowCount == 0 ? spanCount : lastRowCount; + return visualPos > sectionItemCount - lastRowCount; + } +} From d4b44cb187e58947b7e46909bb2d52aec51d9bac Mon Sep 17 00:00:00 2001 From: xxjy Date: Mon, 10 Jun 2019 10:54:08 +0800 Subject: [PATCH 32/45] fix setEmptyView crash because mHeadAndEmptyEnable, mFootAndEmptyEnable, setEmptyView may not change itemCount --- .../com/chad/library/adapter/base/BaseQuickAdapter.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java index 02291e1d3..0a8fb883a 100755 --- a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java @@ -1370,6 +1370,7 @@ public void setEmptyView(int layoutResId) { } public void setEmptyView(View emptyView) { + int oldItemCount = getItemCount(); boolean insert = false; if (mEmptyLayout == null) { mEmptyLayout = new FrameLayout(emptyView.getContext()); @@ -1390,7 +1391,11 @@ public void setEmptyView(View emptyView) { if (mHeadAndEmptyEnable && getHeaderLayoutCount() != 0) { position++; } - notifyItemInserted(position); + if (getItemCount() > oldItemCount) { + notifyItemInserted(position); + } else { + notifyDataSetChanged(); + } } } From e1b23842b300ad2b864331c0b796fe044717be40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=87=E6=98=8E?= Date: Sat, 13 Jul 2019 15:34:56 +0800 Subject: [PATCH 33/45] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index de456df0b..93e9c0120 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ kotlin demo :[BRVAH_kotlin](https://github.com/AllenCoder/BRVAH_kotlin) -keepclassmembers class **$** extends com.chad.library.adapter.base.BaseViewHolder { (...); } +-keepattributes InnerClasses ``` # Extension library From a8e48c7b719b1726325f40bd488cbe6ad3e03ad5 Mon Sep 17 00:00:00 2001 From: limuyang Date: Sun, 14 Jul 2019 16:18:07 +0800 Subject: [PATCH 34/45] Add DiffUtil: new setNewDiffData(); new BaseQuickDiffCallback. --- app/src/main/AndroidManifest.xml | 1 + .../DiffUtilActivity.java | 126 ++++++++++++++++++ .../HomeActivity.java | 6 +- .../adapter/diffUtil/DiffDemoCallback.java | 73 ++++++++++ .../adapter/diffUtil/DiffUtilAdapter.java | 54 ++++++++ .../data/DataServer.java | 14 +- .../entity/DiffUtilDemoEntity.java | 48 +++++++ app/src/main/res/layout/activity_diffutil.xml | 38 ++++++ .../adapter/base/BaseQuickAdapter.java | 79 +++++++++++ .../adapter/base/BaseQuickDiffCallback.java | 85 ++++++++++++ 10 files changed, 520 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/chad/baserecyclerviewadapterhelper/DiffUtilActivity.java create mode 100644 app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/diffUtil/DiffDemoCallback.java create mode 100644 app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/diffUtil/DiffUtilAdapter.java create mode 100644 app/src/main/java/com/chad/baserecyclerviewadapterhelper/entity/DiffUtilDemoEntity.java create mode 100644 app/src/main/res/layout/activity_diffutil.xml create mode 100644 library/src/main/java/com/chad/library/adapter/base/BaseQuickDiffCallback.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9a9b1a294..0e54457fc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -36,6 +36,7 @@ android:launchMode="singleTask"> + \ No newline at end of file diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/DiffUtilActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/DiffUtilActivity.java new file mode 100644 index 000000000..6316aa6c6 --- /dev/null +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/DiffUtilActivity.java @@ -0,0 +1,126 @@ +package com.chad.baserecyclerviewadapterhelper; + +import android.os.Bundle; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.Button; +import com.chad.baserecyclerviewadapterhelper.adapter.diffUtil.DiffDemoCallback; +import com.chad.baserecyclerviewadapterhelper.adapter.diffUtil.DiffUtilAdapter; +import com.chad.baserecyclerviewadapterhelper.base.BaseActivity; +import com.chad.baserecyclerviewadapterhelper.data.DataServer; +import com.chad.baserecyclerviewadapterhelper.entity.DiffUtilDemoEntity; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by limuyang + * Date: 2019/7/14 + */ +public class DiffUtilActivity extends BaseActivity { + private RecyclerView mRecyclerView; + private Button itemChangeBtn; + private Button notifyChangeBtn; + + private DiffUtilAdapter mAdapter; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_diffutil); + setBackBtn(); + setTitle("DiffUtil Use"); + + findView(); + initRv(); + initClick(); + } + + private void findView() { + mRecyclerView = findViewById(R.id.diff_rv); + itemChangeBtn = findViewById(R.id.item_change_btn); + notifyChangeBtn = findViewById(R.id.notify_change_btn); + } + + private void initRv() { + mAdapter = new DiffUtilAdapter(DataServer.getDiffUtilDemoEntities()); + mAdapter.bindToRecyclerView(mRecyclerView); + } + + private void initClick() { + itemChangeBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + DiffDemoCallback callback = new DiffDemoCallback(getNewList()); + mAdapter.setNewDiffData(callback); + } + }); + + notifyChangeBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // change item 0 + mAdapter.getData().set(0, new DiffUtilDemoEntity( + 1, + "😊😊Item " + 0, + "Item " + 0 + " content have change (notifyItemChanged)", + "06-12")); + mAdapter.notifyItemChanged(0, DiffUtilAdapter.ITEM_0_PAYLOAD); + } + }); + } + + + /** + * get new data + * + * @return + */ + private List getNewList() { + List list = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + /* + Simulate deletion of data No. 1 and No. 3 + 模拟删除1号和3号数据 + */ + if (i == 1 || i == 3) continue; + + /* + Simulate modification title of data No. 0 + 模拟修改0号数据的title发生变化 + */ + if (i == 0) { + list.add(new DiffUtilDemoEntity( + i, + "😊Item " + i, + "This item " + i + " content", + "06-12") + ); + continue; + } + + /* + Simulate modification content of data No. 4 + 模拟修改4号数据的content发生变化 + */ + if (i == 4) { + list.add(new DiffUtilDemoEntity( + i, + "Item " + i, + "Oh~~~~~~, Item " + i + " content have change", + "06-12") + ); + continue; + } + + list.add(new DiffUtilDemoEntity( + i, + "Item " + i, + "This item " + i + " content", + "06-12") + ); + } + return list; + } +} diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/HomeActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/HomeActivity.java index 5e8f58d0a..e6af9538d 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, 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 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, DiffUtilActivity.class}; + private static final String[] TITLE = {"Animation", "MultipleItem", "Header/Footer", "PullToRefresh", "Section", "EmptyView", "DragAndSwipe", "ItemClick", "ExpandableItem", "DataBinding", "UpFetchData", "SectionMultipleItem", "DiffUtil"}; + 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, R.mipmap.gv_databinding}; private ArrayList mDataList; private RecyclerView mRecyclerView; diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/diffUtil/DiffDemoCallback.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/diffUtil/DiffDemoCallback.java new file mode 100644 index 000000000..e1c962405 --- /dev/null +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/diffUtil/DiffDemoCallback.java @@ -0,0 +1,73 @@ +package com.chad.baserecyclerviewadapterhelper.adapter.diffUtil; + +import android.support.annotation.Nullable; + +import com.chad.baserecyclerviewadapterhelper.entity.DiffUtilDemoEntity; +import com.chad.library.adapter.base.BaseQuickDiffCallback; + +import java.util.List; + +/** + * Create DiffCallback + */ +public class DiffDemoCallback extends BaseQuickDiffCallback { + + public DiffDemoCallback(@Nullable List newList) { + super(newList); + } + + /** + * Determine if it is the same item + *

+ * 判断是否是同一个item + * + * @param oldItem New data + * @param newItem old Data + * @return + */ + @Override + protected boolean areItemsTheSame(DiffUtilDemoEntity oldItem, DiffUtilDemoEntity newItem) { + return oldItem.getId() == newItem.getId(); + } + + /** + * When it is the same item, judge whether the content has changed. + *

+ * 当是同一个item时,再判断内容是否发生改变 + * + * @param oldItem New data + * @param newItem old Data + * @return + */ + @Override + protected boolean areContentsTheSame(DiffUtilDemoEntity oldItem, DiffUtilDemoEntity newItem) { + return oldItem.getTitle().equals(newItem.getTitle()) + && oldItem.getContent().equals(newItem.getContent()) + && oldItem.getDate().equals(newItem.getDate()); + } + + /** + * Optional implementation + * Implement this method if you need to precisely modify the content of a view. + * If this method is not implemented, or if null is returned, the entire item will be refreshed. + * + * 可选实现 + * 如果需要精确修改某一个view中的内容,请实现此方法。 + * 如果不实现此方法,或者返回null,将会直接刷新整个item。 + * + * @param oldItem Old data + * @param newItem New data + * @return Payload info. if return null, the entire item will be refreshed. + */ + @Override + protected Object getChangePayload(DiffUtilDemoEntity oldItem, DiffUtilDemoEntity newItem) { + if (!oldItem.getTitle().equals(newItem.getTitle())) { + // if only title change(如果标题变化了) + return DiffUtilAdapter.TITLE_PAYLOAD; + } else if (!oldItem.getContent().equals(newItem.getContent())) { + // if only content change(如果内容变化了) + return DiffUtilAdapter.CONTENT_PAYLOAD; + } + return null; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/diffUtil/DiffUtilAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/diffUtil/DiffUtilAdapter.java new file mode 100644 index 000000000..b04296c08 --- /dev/null +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/diffUtil/DiffUtilAdapter.java @@ -0,0 +1,54 @@ +package com.chad.baserecyclerviewadapterhelper.adapter.diffUtil; + +import android.support.annotation.NonNull; + +import com.chad.baserecyclerviewadapterhelper.R; +import com.chad.baserecyclerviewadapterhelper.entity.DiffUtilDemoEntity; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; + +import java.util.List; + +/** + * Create adapter + */ +public class DiffUtilAdapter extends BaseQuickAdapter { + public static final int TITLE_PAYLOAD = 899; + public static final int CONTENT_PAYLOAD = 900; + public static final int ITEM_0_PAYLOAD = 901; + + public DiffUtilAdapter(List list) { + super(R.layout.layout_animation, list); + } + + @Override + protected void convert(BaseViewHolder helper, DiffUtilDemoEntity item) { + helper.setText(R.id.tweetName, item.getTitle()) + .setText(R.id.tweetText, item.getContent()) + .setText(R.id.tweetDate, item.getDate()); + } + + /** + * This method will only be executed when there is payload info + * + * 当有 payload info 时,只会执行此方法 + * + * @param helper A fully initialized helper. + * @param item The item that needs to be displayed. + * @param payloads payload info. + */ + @Override + protected void convertPayloads(BaseViewHolder helper, DiffUtilDemoEntity item, @NonNull List payloads) { + for (Object p : payloads) { + int payload = (int) p; + if (payload == TITLE_PAYLOAD) { + helper.setText(R.id.tweetName, item.getTitle()); + } else if (payload == CONTENT_PAYLOAD) { + helper.setText(R.id.tweetText, item.getContent()); + } else if (payload == ITEM_0_PAYLOAD) { + helper.setText(R.id.tweetName, item.getTitle()) + .setText(R.id.tweetText, item.getContent()); + } + } + } +} 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 67ae1d228..89b0124ec 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/data/DataServer.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/data/DataServer.java @@ -1,6 +1,7 @@ package com.chad.baserecyclerviewadapterhelper.data; +import com.chad.baserecyclerviewadapterhelper.entity.DiffUtilDemoEntity; import com.chad.baserecyclerviewadapterhelper.entity.MultipleItem; import com.chad.baserecyclerviewadapterhelper.entity.MySection; import com.chad.baserecyclerviewadapterhelper.entity.NormalMultipleEntity; @@ -152,5 +153,16 @@ public static List getNormalMultipleEntities() { // return list; // } - + public static List getDiffUtilDemoEntities() { + List list = new ArrayList<>(); + for (int i = 0; i < 10; i++){ + list.add(new DiffUtilDemoEntity( + i, + "Item " + i, + "This item " + i + " content", + "06-12") + ); + } + return list; + } } diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/entity/DiffUtilDemoEntity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/entity/DiffUtilDemoEntity.java new file mode 100644 index 000000000..3a4bf9064 --- /dev/null +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/entity/DiffUtilDemoEntity.java @@ -0,0 +1,48 @@ +package com.chad.baserecyclerviewadapterhelper.entity; + +public class DiffUtilDemoEntity { + + private int id; + private String title; + private String content; + private String date; + + public DiffUtilDemoEntity(int id, String title, String content, String date) { + this.id = id; + this.title = title; + this.content = content; + this.date = date; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } +} diff --git a/app/src/main/res/layout/activity_diffutil.xml b/app/src/main/res/layout/activity_diffutil.xml new file mode 100644 index 000000000..0610d896b --- /dev/null +++ b/app/src/main/res/layout/activity_diffutil.xml @@ -0,0 +1,38 @@ + + + + + + + +