├── .gradle ├── 4.1 │ ├── fileChanges │ │ └── last-build.bin │ ├── fileContent │ │ └── fileContent.lock │ ├── fileHashes │ │ ├── fileHashes.bin │ │ ├── fileHashes.lock │ │ └── resourceHashesCache.bin │ ├── javaCompile │ │ ├── classAnalysis.bin │ │ ├── jarAnalysis.bin │ │ ├── javaCompile.lock │ │ ├── taskHistory.bin │ │ └── taskJars.bin │ └── taskHistory │ │ ├── fileSnapshots.bin │ │ ├── taskHistory.bin │ │ └── taskHistory.lock ├── 4.4 │ ├── fileChanges │ │ └── last-build.bin │ ├── fileContent │ │ └── fileContent.lock │ ├── fileHashes │ │ ├── fileHashes.bin │ │ ├── fileHashes.lock │ │ └── resourceHashesCache.bin │ ├── javaCompile │ │ ├── classAnalysis.bin │ │ ├── jarAnalysis.bin │ │ ├── javaCompile.lock │ │ ├── taskHistory.bin │ │ └── taskJars.bin │ └── taskHistory │ │ ├── taskHistory.bin │ │ └── taskHistory.lock └── buildOutputCleanup │ ├── buildOutputCleanup.lock │ ├── cache.properties │ └── outputFiles.bin ├── .idea ├── caches │ └── build_file_checksums.ser ├── codeStyles │ └── Project.xml ├── gradle.xml ├── libraries │ ├── Gradle__android_arch_core_common_1_1_0_jar.xml │ ├── Gradle__android_arch_core_runtime_1_1_0.xml │ ├── Gradle__android_arch_lifecycle_common_1_1_0_jar.xml │ ├── Gradle__android_arch_lifecycle_livedata_core_1_1_0.xml │ ├── Gradle__android_arch_lifecycle_runtime_1_1_0.xml │ ├── Gradle__android_arch_lifecycle_viewmodel_1_1_0.xml │ ├── Gradle__com_alibaba_android_vlayout_1_2_8.xml │ ├── Gradle__com_android_support_animated_vector_drawable_27_1_1.xml │ ├── Gradle__com_android_support_appcompat_v7_27_1_1.xml │ ├── Gradle__com_android_support_cardview_v7_27_1_1.xml │ ├── Gradle__com_android_support_design_27_1_1.xml │ ├── Gradle__com_android_support_recyclerview_v7_27_1_1.xml │ ├── Gradle__com_android_support_support_annotations_27_1_1_jar.xml │ ├── Gradle__com_android_support_support_compat_27_1_1.xml │ ├── Gradle__com_android_support_support_core_ui_27_1_1.xml │ ├── Gradle__com_android_support_support_core_utils_27_1_1.xml │ ├── Gradle__com_android_support_support_fragment_27_1_1.xml │ ├── Gradle__com_android_support_support_media_compat_27_1_1.xml │ ├── Gradle__com_android_support_support_v4_27_1_1.xml │ ├── Gradle__com_android_support_support_vector_drawable_27_1_1.xml │ ├── Gradle__com_android_support_transition_27_1_1.xml │ ├── Gradle__com_github_bumptech_glide_annotations_4_5_0_jar.xml │ ├── Gradle__com_github_bumptech_glide_disklrucache_4_5_0_jar.xml │ ├── Gradle__com_github_bumptech_glide_gifdecoder_4_5_0.xml │ ├── Gradle__com_github_bumptech_glide_glide_4_5_0.xml │ ├── Gradle__com_google_code_gson_gson_2_8_2_jar.xml │ ├── Gradle__com_scwang_smartrefresh_SmartRefreshLayout_1_0_5_1.xml │ ├── Gradle__com_sunfusheng_marqueeview_1_3_1.xml │ ├── Gradle__com_youth_banner_banner_1_4_9.xml │ ├── Gradle__io_reactivex_rxandroid_1_2_1.xml │ └── Gradle__io_reactivex_rxjava_1_1_6_jar.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml ├── vcs.xml └── workspace.xml ├── BaseVLayoutAdapterHelper.iml ├── LICENSE ├── README.md ├── app ├── app.iml ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ └── data.json │ ├── java │ └── com │ │ └── mario │ │ └── baseadapter │ │ └── demo │ │ ├── base │ │ ├── BaseActivity.java │ │ └── BaseRecyclerActivity.java │ │ ├── data │ │ └── AnalogData.java │ │ ├── holder │ │ └── WaterHolder.java │ │ ├── image │ │ ├── CustomGlideModule.java │ │ └── CustomImageLoader.java │ │ ├── model │ │ ├── BannerBean.java │ │ ├── GridBean.java │ │ ├── Headlines.java │ │ ├── HomeData.java │ │ ├── MainModel.java │ │ ├── NormalModel.java │ │ ├── Section2Model.java │ │ ├── TmallMarket.java │ │ └── WaterCargo.java │ │ ├── ui │ │ ├── EmptyActivity.java │ │ ├── HeraderAndFooterActivity.java │ │ ├── MainActivity.java │ │ ├── OnePlusNLayoutActivity.java │ │ ├── SectionedActivity.java │ │ └── TaobaoActivity.java │ │ └── util │ │ ├── RxSchedulers.java │ │ └── ScreenUtil.java │ └── res │ ├── drawable-v24 │ └── ic_launcher_foreground.xml │ ├── drawable │ ├── btn_return.xml │ └── ic_launcher_background.xml │ ├── layout │ ├── common_recyclerview.xml │ ├── common_title_recyclerview.xml │ ├── multilt_text_view.xml │ ├── recyc_banner.xml │ ├── recyc_grid.xml │ ├── recyc_news.xml │ ├── recyc_one_item.xml │ ├── recyc_water.xml │ └── toolbar_normal.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-mdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xxhdpi │ ├── ic_launcher.png │ ├── ic_launcher_round.png │ └── ic_news.png │ ├── mipmap-xxxhdpi │ ├── ic_launcher.png │ ├── ic_launcher_round.png │ └── ic_movie_black_48dp.png │ └── values │ ├── base_adapter_styles.xml │ ├── colors.xml │ ├── ids.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── library ├── build.gradle ├── library.iml ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── mario │ │ └── baseadapter │ │ ├── VBaseAdapter.java │ │ ├── VBaseSectionedAdapter.java │ │ ├── decoration │ │ └── SectionDecoration.java │ │ ├── holder │ │ ├── VBaseHolder.java │ │ └── VBaseHolderHelper.java │ │ ├── listener │ │ ├── OnChildItemClickListener.java │ │ ├── OnItemChildClickListener.java │ │ ├── OnItemClickListener.java │ │ └── OnNoDoubleClickListener.java │ │ └── wrapper │ │ ├── VBaseWrapper.java │ │ ├── VEmptyWrapper.java │ │ └── VHeaderFooterWrapper.java │ └── res │ └── values │ └── strings.xml ├── local.properties ├── screenshot ├── adapter01.png ├── adapter02.png ├── adapter03.png └── adapter04.png └── settings.gradle /.gradle/4.1/fileChanges/last-build.bin: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gradle/4.1/fileContent/fileContent.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.1/fileContent/fileContent.lock -------------------------------------------------------------------------------- /.gradle/4.1/fileHashes/fileHashes.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.1/fileHashes/fileHashes.bin -------------------------------------------------------------------------------- /.gradle/4.1/fileHashes/fileHashes.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.1/fileHashes/fileHashes.lock -------------------------------------------------------------------------------- /.gradle/4.1/fileHashes/resourceHashesCache.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.1/fileHashes/resourceHashesCache.bin -------------------------------------------------------------------------------- /.gradle/4.1/javaCompile/classAnalysis.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.1/javaCompile/classAnalysis.bin -------------------------------------------------------------------------------- /.gradle/4.1/javaCompile/jarAnalysis.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.1/javaCompile/jarAnalysis.bin -------------------------------------------------------------------------------- /.gradle/4.1/javaCompile/javaCompile.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.1/javaCompile/javaCompile.lock -------------------------------------------------------------------------------- /.gradle/4.1/javaCompile/taskHistory.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.1/javaCompile/taskHistory.bin -------------------------------------------------------------------------------- /.gradle/4.1/javaCompile/taskJars.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.1/javaCompile/taskJars.bin -------------------------------------------------------------------------------- /.gradle/4.1/taskHistory/fileSnapshots.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.1/taskHistory/fileSnapshots.bin -------------------------------------------------------------------------------- /.gradle/4.1/taskHistory/taskHistory.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.1/taskHistory/taskHistory.bin -------------------------------------------------------------------------------- /.gradle/4.1/taskHistory/taskHistory.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.1/taskHistory/taskHistory.lock -------------------------------------------------------------------------------- /.gradle/4.4/fileChanges/last-build.bin: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gradle/4.4/fileContent/fileContent.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.4/fileContent/fileContent.lock -------------------------------------------------------------------------------- /.gradle/4.4/fileHashes/fileHashes.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.4/fileHashes/fileHashes.bin -------------------------------------------------------------------------------- /.gradle/4.4/fileHashes/fileHashes.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.4/fileHashes/fileHashes.lock -------------------------------------------------------------------------------- /.gradle/4.4/fileHashes/resourceHashesCache.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.4/fileHashes/resourceHashesCache.bin -------------------------------------------------------------------------------- /.gradle/4.4/javaCompile/classAnalysis.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.4/javaCompile/classAnalysis.bin -------------------------------------------------------------------------------- /.gradle/4.4/javaCompile/jarAnalysis.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.4/javaCompile/jarAnalysis.bin -------------------------------------------------------------------------------- /.gradle/4.4/javaCompile/javaCompile.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.4/javaCompile/javaCompile.lock -------------------------------------------------------------------------------- /.gradle/4.4/javaCompile/taskHistory.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.4/javaCompile/taskHistory.bin -------------------------------------------------------------------------------- /.gradle/4.4/javaCompile/taskJars.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.4/javaCompile/taskJars.bin -------------------------------------------------------------------------------- /.gradle/4.4/taskHistory/taskHistory.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.4/taskHistory/taskHistory.bin -------------------------------------------------------------------------------- /.gradle/4.4/taskHistory/taskHistory.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/4.4/taskHistory/taskHistory.lock -------------------------------------------------------------------------------- /.gradle/buildOutputCleanup/buildOutputCleanup.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/buildOutputCleanup/buildOutputCleanup.lock -------------------------------------------------------------------------------- /.gradle/buildOutputCleanup/cache.properties: -------------------------------------------------------------------------------- 1 | #Tue Jun 12 10:15:51 CST 2018 2 | gradle.version=4.4 3 | -------------------------------------------------------------------------------- /.gradle/buildOutputCleanup/outputFiles.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.gradle/buildOutputCleanup/outputFiles.bin -------------------------------------------------------------------------------- /.idea/caches/build_file_checksums.ser: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvtanxi/BaseVLayoutAdapterHelper/d2b8a9f8993b41291daba2bde3944904af894e45/.idea/caches/build_file_checksums.ser -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 15 | 16 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 18 | 19 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_core_common_1_1_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_core_runtime_1_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_lifecycle_common_1_1_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_lifecycle_livedata_core_1_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_lifecycle_runtime_1_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_lifecycle_viewmodel_1_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_alibaba_android_vlayout_1_2_8.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_animated_vector_drawable_27_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_appcompat_v7_27_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_cardview_v7_27_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_design_27_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_recyclerview_v7_27_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_annotations_27_1_1_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_compat_27_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_core_ui_27_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_core_utils_27_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_fragment_27_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_media_compat_27_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_v4_27_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_vector_drawable_27_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_transition_27_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_github_bumptech_glide_annotations_4_5_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_github_bumptech_glide_disklrucache_4_5_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_github_bumptech_glide_gifdecoder_4_5_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_github_bumptech_glide_glide_4_5_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_google_code_gson_gson_2_8_2_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_scwang_smartrefresh_SmartRefreshLayout_1_0_5_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_sunfusheng_marqueeview_1_3_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_youth_banner_banner_1_4_9.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__io_reactivex_rxandroid_1_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__io_reactivex_rxjava_1_1_6_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 27 | 28 | 29 | 30 | 31 | 32 | 34 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /BaseVLayoutAdapterHelper.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #### 目录 2 | [![](https://jitpack.io/v/lvtanxi/BaseVLayoutAdapterHelper.svg)](https://jitpack.io/#lvtanxi/BaseVLayoutAdapterHelper) 3 | 4 | # BaseVLayoutAdapterHelper 5 | 是基于阿里V-Layout的一个Android 简单的封装的通用Adapter。 6 | 7 | ## 引入 8 | 9 | ``` 10 | allprojects { 11 | repositories { 12 | maven { url 'https://jitpack.io' } 13 | } 14 | } 15 | ``` 16 | ``` 17 | implementation 'com.github.lvtanxi:BaseVLayoutAdapterHelper:lasetversion' 18 | ``` 19 | 20 | ## 使用 21 | 22 | ##(1)简单的数据绑定 23 | ``` 24 | VBaseAdapter mBaseAdapter= new VBaseAdapter(R.layout.item_main) { 25 | @Override 26 | protected void convert(VBaseHolderHelper helper, NormalModel model, int position) { 27 | helper.setText(R.id.main_test, model.getTitle()); 28 | } 29 | }; 30 | VirtualLayoutManager layoutManager = new VirtualLayoutManager(this); 31 | mRecycler.setLayoutManager(layoutManager); 32 | //总adapter 33 | DelegateAdapter delegateAdapter = new DelegateAdapter(layoutManager, true); 34 | delegateAdapter.addAdapter(mBaseAdapter.getTargetAdapter()); 35 | mRecycler.setAdapter(delegateAdapter); 36 | 37 | ``` 38 | 在convert方法中完成数据,只需要简单的将Adapter继承VBaseAdapter,复写convert方法即可。省去了自己编写ViewHolder等大量的重复的代码。 39 | 如果想自定义ViewHolder。就请ViewHolder继承VBaseHolder,然后完成相应的方法复写。 40 | 41 | 42 | ##(2)多种ItemView 43 | ``` 44 | //设置LayoutManager 45 | VirtualLayoutManager layoutManager = new VirtualLayoutManager(this); 46 | mRecycler.setLayoutManager(layoutManager); 47 | mRecycler.addItemDecoration(new SectionDecoration(R.layout.multilt_text_view)); 48 | 49 | //总adapter 50 | DelegateAdapter delegateAdapter = new DelegateAdapter(layoutManager, true); 51 | 52 | //各个adapter 53 | bannerAdapter = new VBaseAdapter(R.layout.recyc_banner) { 54 | @Override 55 | protected void convert(VBaseHolderHelper holder, BannerBean bannerBean, int position) { 56 | Banner banner = holder.getView(R.id.banner); 57 | banner.setImages(bannerBean.getPic_url()); 58 | //设置图片加载器 59 | banner.setImageLoader(new ImageLoader() { 60 | @Override 61 | public void displayImage(Context context, Object o, ImageView imageView) { 62 | Glide.with(context).load((String) o).centerCrop().diskCacheStrategy(DiskCacheStrategy.ALL).into 63 | (imageView); 64 | } 65 | }); 66 | banner.start(); 67 | } 68 | }; 69 | gridAdapter = new VBaseAdapter(R.layout.recyc_grid, getGridLayoutHelp()) { 70 | @Override 71 | protected void convert(VBaseHolderHelper holder, GridBean gridBean, int position) { 72 | Glide.with(TaobaoActivity.this).load(gridBean.getPic_url()).centerCrop().diskCacheStrategy(DiskCacheStrategy.ALL).into(holder.getImageView(R.id.icon)); 73 | holder.setText(R.id.func, gridBean.getFunction()); 74 | } 75 | }; 76 | delegateAdapter.addAdapter(bannerAdapter); 77 | delegateAdapter.addAdapter(gridAdapter); 78 | mRecycler.setAdapter(delegateAdapter); 79 | ``` 80 | V-Layout 中自带了一个DelegateAdapter,可以添加很多个不同的Adapter,我们只需要按照顺序添加不同的Adapter就可以了 81 | 82 | 83 | ##(3)分组itemView 84 | ``` 85 | mSectionedAdapter = new VBaseSectionedAdapter(R.layout.multilt_text_view, R.layout.section_view) 86 | ..... 87 | 88 | ``` 89 | VBaseSectionedAdapter 主要是针对分组的情况来做出的处理,json的格式如: [data1:[{},{}],data2:[{},{}]],需要重写convert和convertChildItem方法 90 | 91 | 92 | ##(4)添加HeaderView、FooterView 93 | ``` 94 | TextView header1Tv = new TextView(this); 95 | mBaseAdapter.addHeaderView(header1Tv); 96 | TextView footer1Tv = new TextView(this); 97 | TextView footer2Tv = new TextView(this); 98 | mBaseAdapter.addFooterView(footer1Tv); 99 | mBaseAdapter.addFooterView(footer2Tv); 100 | 101 | DelegateAdapter delegateAdapter = new DelegateAdapter(layoutManager, true); 102 | delegateAdapter.addAdapter(mBaseAdapter.getTargetAdapter()); 103 | mRecycler.setAdapter(delegateAdapter); 104 | 105 | ``` 106 | 107 | 这里比较纠结,因为V-Layout 已经实现了多Adapter模式,添加HeaderView、FooterView是否需要还有点考虑。类似装饰者模式,直接将原本的adapter传入,初始化一个HeaderAndFooterWrapper对象,然后调用相关API添加。 108 | 这里需要注意**delegateAdapter.addAdapter(mBaseAdapter.getTargetAdapter())**,使用了VHeaderFooterWrapper包装类(BaseAdapter中自动选择) 109 | 110 | 111 | 112 | 113 | ## 一些回调 114 | ``` 115 | mBaseAdapter.addOnItemClickListener(new OnItemClickListener() { 116 | @Override 117 | public void onItemClick(View view, int i, String s) { 118 | showToast(s); 119 | } 120 | }); 121 | mBaseAdapter.addOnItemChildClickListener(new OnItemChildClickListener() { 122 | @Override 123 | public void onItemChildClick(View view, int i) { 124 | showToast("this is item : " + i+" say ,I'm a image "); 125 | } 126 | }); 127 | 128 | ``` 129 | 130 | 131 | ## 感谢 132 | 133 | * [https://github.com/hongyangAndroid/baseAdapter](https://github.com/hongyangAndroid/baseAdapter) 134 | 135 | 本文中用到的包装类灵感来源于鸿洋大神 136 | 137 | * [https://github.com/alibaba/vlayout](https://github.com/alibaba/vlayout) 138 | 139 | vlayout的项目地址 140 | 141 | * [https://juejin.im/post/5a0107816fb9a0452b48a205](https://juejin.im/post/5a0107816fb9a0452b48a205) 142 | 143 | 本文中很好的为V-Layout做了说明 144 | 145 | ## 尾声 146 | 这是自己第一次开源lib,很多地方经验不足,也希望大家会喜欢 147 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion rootProject.BUILD_SDK_VERSION 5 | defaultConfig { 6 | applicationId "com.mario.baseadapter.demo" 7 | minSdkVersion rootProject.MIN_SDK_VERSION 8 | targetSdkVersion rootProject.TARGET_SDK_VERSION 9 | versionCode 1 10 | versionName "1.0" 11 | } 12 | buildTypes { 13 | release { 14 | minifyEnabled false 15 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 16 | } 17 | } 18 | } 19 | 20 | dependencies { 21 | implementation fileTree(include: ['*.jar'], dir: 'libs') 22 | implementation "com.android.support:appcompat-v7:$SUPPORT_VERSION" 23 | implementation "com.android.support:design:$SUPPORT_VERSION" 24 | implementation "com.android.support:recyclerview-v7:$SUPPORT_VERSION" 25 | implementation "com.android.support:cardview-v7:$SUPPORT_VERSION" 26 | implementation 'com.youth.banner:banner:1.4.9' 27 | implementation 'io.reactivex:rxandroid:1.2.1' 28 | implementation 'com.sunfusheng:marqueeview:1.3.1' 29 | implementation 'com.github.bumptech.glide:glide:4.5.0' 30 | annotationProcessor 'com.github.bumptech.glide:compiler:4.5.0' 31 | implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1' 32 | //implementation 'com.github.lvtanxi:BaseVLayoutAdapterHelper:v1.0.0' 33 | implementation project(':library') 34 | implementation 'com.google.code.gson:gson:2.8.2' 35 | implementation ('com.alibaba.android:vlayout:1.2.8@aar') { 36 | transitive = true 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/assets/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "banner": { 3 | "pic_url": [ 4 | "https://aecpm.alicdn.com/tps/i2/TB10vPXKpXXXXacXXXXvKyzTVXX-520-280.jpg", 5 | "https://img.alicdn.com/tfs/TB1ibsGXwMPMeJjy1XcXXXpppXa-520-280.jpg_q90", 6 | "https://img.alicdn.com/simba/img/TB1g_TJOVXXXXbUXFXXSutbFXXX.jpg", 7 | "https://img.alicdn.com/tfs/TB1xrgFXwoQMeJjy0FoXXcShVXa-520-280.jpg_q90" 8 | ] 9 | }, 10 | "grid": [ 11 | { 12 | "function": "天猫", 13 | "pic_url": "https://img.alicdn.com/tps/TB1.8SJPXXXXXc4XXXXXXXXXXXX-200-200.png_60x60.jpg" 14 | }, 15 | { 16 | "function": "聚划算", 17 | "pic_url": "https://img.alicdn.com/tps/TB1.8SJPXXXXXc4XXXXXXXXXXXX-200-200.png_60x60.jpg" 18 | }, 19 | { 20 | "function": "天猫国际", 21 | "pic_url": "https://img.alicdn.com/tps/TB1rbMePFXXXXXFaXXXXXXXXXXX-70-70.png_60x60.jpg" 22 | }, 23 | { 24 | "function": "外卖", 25 | "pic_url": "https://img.alicdn.com/tps/TB1rbMePFXXXXXFaXXXXXXXXXXX-70-70.png_60x60.jpg" 26 | }, 27 | { 28 | "function": "天猫超市", 29 | "pic_url": "https://img.alicdn.com/tps/TB1rbMePFXXXXXFaXXXXXXXXXXX-70-70.png_60x60.jpg" 30 | }, 31 | { 32 | "function": "土豆", 33 | "pic_url": "https://img.alicdn.com/tps/TB1.8SJPXXXXXc4XXXXXXXXXXXX-200-200.png_60x60.jpg" 34 | }, 35 | { 36 | "function": "肥猪旅行", 37 | "pic_url": "https://img.alicdn.com/tps/TB1rbMePFXXXXXFaXXXXXXXXXXX-70-70.png_60x60.jpg" 38 | }, 39 | { 40 | "function": "领金币", 41 | "pic_url": "https://img.alicdn.com/tps/TB1.8SJPXXXXXc4XXXXXXXXXXXX-200-200.png_60x60.jpg" 42 | }, 43 | { 44 | "function": "拍卖", 45 | "pic_url": "https://img.alicdn.com/tps/TB1.8SJPXXXXXc4XXXXXXXXXXXX-200-200.png_60x60.jpg" 46 | }, 47 | { 48 | "function": "分类", 49 | "pic_url": "https://img.alicdn.com/tps/TB1rbMePFXXXXXFaXXXXXXXXXXX-70-70.png_60x60.jpg" 50 | } 51 | ], 52 | "headlines": [ 53 | { 54 | "url_pic": "https://img.alicdn.com/imgextra/i1/2240767867/TB2TXdNbBcHL1JjSZJiXXcKcpXa_!!2240767867-0-beehive-scenes.jpg_60x60q90.jpg" 55 | } 56 | ], 57 | "haohuo": [ 58 | "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1504086658890&di=c2c4f13cf461cf9d96d19ddd1ababd83&imgtype=0&src=http%3A%2F%2Fpic.58pic.com%2F58pic%2F17%2F38%2F06%2F31v58PICKB5_1024.jpg", 59 | "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1504086706511&di=754383109fff978779ccb996e0b31db4&imgtype=0&src=http%3A%2F%2Fwww.kaitao.cn%2Fdata%2Fupload%2Fueditor%2F20161003%2F57f201e593154.jpg", 60 | "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1504086713612&di=9885ec5cd2c5938a3196cbd70e1484ae&imgtype=0&src=http%3A%2F%2Fpic2.cxtuku.com%2F00%2F16%2F20%2Fb373606d0d6c.jpg", 61 | "https://img.alicdn.com/tfs/TB1t9v9RFXXXXaCXXXXXXXXXXXX-360-280.jpg_180x180q90.jpg", 62 | "https://f10.baidu.com/it/u=1571403070,2974482900&fm=72" 63 | ], 64 | "force": [ 65 | "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1504085695335&di=9b3b9765698fcf56d8492dbb033c70d3&imgtype=0&src=http%3A%2F%2Fxiangyouhui.cn%2Fuploads%2F201503%2Ftaobao20150319h01.jpg72180996-a276-d5ed-cea2-e0a811574765.jpg" 66 | ], 67 | "tmarket": [ 68 | { 69 | "pic_url": "http://img5.imgtn.bdimg.com/it/u=2020601487,1415821136&fm=26&gp=0.jpg" 70 | }, 71 | { 72 | "pic_url": "cohttp://img5.imgtn.bdimg.com/it/u=2020601487,1415821136&fm=26&gp=0.jpgm" 73 | }, 74 | { 75 | "pic_url": "cohttp://img5.imgtn.bdimg.com/it/u=2020601487,1415821136&fm=26&gp=0.jpgm" 76 | }, 77 | { 78 | "pic_url": "cohttp://img5.imgtn.bdimg.com/it/u=2020601487,1415821136&fm=26&gp=0.jpgm" 79 | }, 80 | { 81 | "pic_url": "cohttp://img5.imgtn.bdimg.com/it/u=2020601487,1415821136&fm=26&gp=0.jpgm" 82 | }, 83 | { 84 | "pic_url": "cohttp://img5.imgtn.bdimg.com/it/u=2020601487,1415821136&fm=26&gp=0.jpgm" 85 | } 86 | ], 87 | "watercargo": [ 88 | { 89 | "price": "27.5", 90 | "title": "潮人新品风骚必备浪荡有理", 91 | "pic_url": "https://img.alicdn.com/imgextra/i3/93/TB2Qt0WXHsTMeJjy1zbXXchlVXa_!!93-0-luban.jpg_290x290q90.jpg", 92 | "buynum": "3582" 93 | }, 94 | { 95 | "price": "33", 96 | "title": "秒杀狼牙棒为啥我的王者还是铂金", 97 | "pic_url": "https://img.alicdn.com/simba/img/TB19GO2SXXXXXXmaXXXSutbFXXX.jpg", 98 | "buynum": "3967" 99 | }, 100 | { 101 | "price": "99.3", 102 | "title": "昨天晚上又被坑了两把娃哈哈我的王者荣耀啊啊", 103 | "pic_url": "https://img.alicdn.com/imgextra/i4/5/TB21NsdpVXXXXaOXXXXXXXXXXXX_!!5-0-yamato.jpg_210x1000q90.jpg", 104 | "buynum": "9999" 105 | }, 106 | { 107 | "price": "88.2", 108 | "title": "为什么淘宝没有卖铭文的", 109 | "pic_url": "https://img.alicdn.com/imgextra/i2/130/TB2XmnXX6mfF1JjSspcXXXZMXXa_!!130-0-luban.jpg_200x200q90.jpg", 110 | "buynum": "999" 111 | }, 112 | { 113 | "price": "54.9", 114 | "title": "华为手机很华为小米手机很香", 115 | "pic_url": "https://img.alicdn.com/imgextra/i2/159/TB2yX48azJTMKJjSZFPXXbHUFXa_!!159-2-luban.png_200x200q90.jpg", 116 | "buynum": "3278" 117 | }, 118 | { 119 | "price": "28", 120 | "title": "我把我前女友的电话放里面了你们谁找得到", 121 | "pic_url": "https://img.alicdn.com/imgextra/i4/98/TB2h5t.XNeEJuJjy1XaXXXPhVXa_!!98-0-luban.jpg_200x200q90.jpg", 122 | "buynum": "0" 123 | }, 124 | { 125 | "price": "179", 126 | "title": "VIVO手机好还是OPPO手机好他们好像是一家吧", 127 | "pic_url": "https://img.alicdn.com/imgextra/i1/43/TB2TIcLXBUSMeJjSszbXXberFXa_!!43-2-luban.png_200x200q90.jpg", 128 | "buynum": "8888" 129 | }, 130 | { 131 | "price": "23", 132 | "title": "条纹衬衫裙相信大家都不陌生 但是每款衬衫裙都有自己的小特色展现不一样的风格 这款衬衫裙我最爱的就是裙摆的拼接设计 增加", 133 | "pic_url": "https://img.alicdn.com/imgextra/i2/711221390/TB2iloipYXlpuFjSszfXXcSGXXa_!!711221390-2-beehive-scenes.png_290x10000.jpg", 134 | "buynum": "5634" 135 | }, 136 | { 137 | "price": "19", 138 | "title": "居家开仓日潮男必备买了上最强王者", 139 | "pic_url": "https://img.alicdn.com/imgextra/i2/21/TB2AwI3XDZRMeJjSspkXXXGpXXa_!!21-0-luban.jpg_200x200q90.jpg", 140 | "buynum": "879" 141 | }, 142 | { 143 | "price": "17", 144 | "title": "加厚面料 modern house 大象造型韩式立体贴布绣床头靠背靠枕 ", 145 | "pic_url": "https://gw.alicdn.com/bao/uploaded/i2/TB1GR2oQXXXXXXQapXXYXGcGpXX_M2.SS2_280x380xz.jpg", 146 | "buynum": "3298" 147 | }, 148 | { 149 | "price": "68", 150 | "title": "美式摩天轮相框摆件创意家居装饰品咖啡厅酒柜电视柜房间卧室摆设 ", 151 | "pic_url": "https://gw.alicdn.com/bao/uploaded/i8/TB1jfMBQXXXXXajXVXXXXXXXXXX_!!0-item_pic.jpg_280x380xz.jpg", 152 | "buynum": "110" 153 | }, 154 | { 155 | "price": "73", 156 | "title": "秋装女装韩版原宿风背后字母宽松长袖T恤基础款纯色学生打底上衣 ", 157 | "pic_url": "https://gw.alicdn.com/bao/uploaded/i8/1746960915/TB2EANUahz_F1JjSZFIXXcxHVXa_!!1746960915.jpg_280x380xz.jpg", 158 | "buynum": "345" 159 | }, 160 | { 161 | "price": "22", 162 | "title": "罗子君同款我的前半生马伊璃同款裤子唐晶同款黑色牛仔裤女九分裤 ", 163 | "pic_url": "https://gw.alicdn.com/bao/uploaded/i2/2676053054/TB2RsG0XCqEJuJjy0FpXXcecVXa_!!2676053054.jpg_280x380xz.jpg", 164 | "buynum": "3453" 165 | }, 166 | { 167 | "price": "999", 168 | "title": "韩版时尚休闲套装秋装宽松连帽卫衣外套学生+阔腿九分裤两件套女 ", 169 | "pic_url": "https://gw.alicdn.com/bao/uploaded/i6/1746960915/TB1JnNcSVXXXXbAaXXXXXXXXXXX_!!0-item_pic.jpg_280x380xz.jpg", 170 | "buynum": "4234" 171 | }, 172 | { 173 | "price": "69", 174 | "title": "2017秋季新款女装韩版气质上衣哈伦裤chic两件套洋气套装女时尚潮 ", 175 | "pic_url": "https://gw.alicdn.com/bao/uploaded/i7/3117724374/TB16ZT7a.EIL1JjSZFFXXc5kVXa_!!0-item_pic.jpg_280x380xz.jpg", 176 | "buynum": "3543" 177 | }, 178 | { 179 | "price": "123", 180 | "title": "夏装女装韩版原宿风中长款bf宽松字母短袖T恤五分袖学生上衣体恤 ", 181 | "pic_url": "https://gw.alicdn.com/bao/uploaded/i5/TB1h8xMRFXXXXX1XXXXXXXXXXXX_!!0-item_pic.jpg_280x380xz.jpg", 182 | "buynum": "3543" 183 | }, 184 | { 185 | "price": "137", 186 | "title": "挺有特色的设计,挺喜欢的呢,情侣装 买了两套 ", 187 | "pic_url": "https://gw.alicdn.com/bao/uploaded/i3/2108996616/TB1juOxSVXXXXblXXXXXXXXXXXX_!!0-item_pic.jpg_280x380xz.jpg", 188 | "buynum": "8737" 189 | } 190 | ] 191 | } -------------------------------------------------------------------------------- /app/src/main/java/com/mario/baseadapter/demo/base/BaseActivity.java: -------------------------------------------------------------------------------- 1 | package com.mario.baseadapter.demo.base; 2 | 3 | import android.content.pm.ActivityInfo; 4 | import android.os.Bundle; 5 | import android.support.annotation.IdRes; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.support.v7.widget.Toolbar; 8 | import android.view.MenuItem; 9 | import android.view.View; 10 | import android.widget.TextView; 11 | import android.widget.Toast; 12 | 13 | import com.mario.baseadapter.demo.R; 14 | 15 | 16 | public abstract class BaseActivity extends AppCompatActivity { 17 | protected TextView mTitle; 18 | protected TextView mMore; 19 | protected Toolbar mToolbar; 20 | 21 | @Override 22 | protected void onCreate(Bundle savedInstanceState) { 23 | super.onCreate(savedInstanceState); 24 | setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 25 | setContentView(loadLayoutId()); 26 | initToolbar(); 27 | initViews(); 28 | initData(); 29 | bindListener(); 30 | onProcessLogic(); 31 | } 32 | 33 | 34 | protected void initToolbar() { 35 | mToolbar = $(R.id.toolbar); 36 | if (mToolbar == null) 37 | return; 38 | setSupportActionBar(mToolbar); 39 | mTitle = $(R.id.toolbar_title); 40 | mMore = $(R.id.toolbar_more); 41 | } 42 | 43 | 44 | protected T $(@IdRes int viewId) { 45 | return findViewById(viewId); 46 | } 47 | 48 | protected T $(View view, @IdRes int viewId) { 49 | return view.findViewById(viewId); 50 | } 51 | 52 | 53 | @Override 54 | public boolean onOptionsItemSelected(MenuItem item) { 55 | if (item.getItemId() == android.R.id.home) { 56 | finish(); 57 | return true; 58 | } 59 | return super.onOptionsItemSelected(item); 60 | } 61 | 62 | /** 63 | * 为Activity加载布局文件 64 | */ 65 | protected abstract int loadLayoutId(); 66 | 67 | /** 68 | * 初始化控件 69 | */ 70 | protected abstract void initViews(); 71 | 72 | /** 73 | * 初始化数剧 74 | */ 75 | protected abstract void initData(); 76 | 77 | /** 78 | * 为控件设置监听 79 | */ 80 | protected void bindListener() { 81 | 82 | } 83 | 84 | /** 85 | * 逻辑操作,网络请求 86 | */ 87 | protected void onProcessLogic() { 88 | 89 | } 90 | 91 | /** 92 | * 控件点击回调 93 | */ 94 | protected void onClick(View view, int id) { 95 | 96 | } 97 | 98 | 99 | public void showToast(String message) { 100 | if (null != message) 101 | Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); 102 | } 103 | 104 | @Override 105 | public void setTitle(CharSequence title) { 106 | if (mTitle != null) 107 | mTitle.setText(title); 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /app/src/main/java/com/mario/baseadapter/demo/base/BaseRecyclerActivity.java: -------------------------------------------------------------------------------- 1 | package com.mario.baseadapter.demo.base; 2 | 3 | import android.support.v7.widget.RecyclerView; 4 | 5 | import com.alibaba.android.vlayout.DelegateAdapter; 6 | import com.alibaba.android.vlayout.VirtualLayoutManager; 7 | import com.mario.baseadapter.demo.R; 8 | import com.scwang.smartrefresh.layout.api.RefreshLayout; 9 | 10 | 11 | /** 12 | * User: 吕勇 13 | * Date: 2017-05-04 14 | * Time: 14:52 15 | * Description:列表基类(layout中请包含common_recyclerview中的相关id) 16 | */ 17 | public abstract class BaseRecyclerActivity extends BaseActivity { 18 | protected RefreshLayout mRefreshLayout; 19 | protected RecyclerView mRecyclerView; 20 | protected VirtualLayoutManager mVirtualLayoutManager; 21 | protected DelegateAdapter mDelegateAdapter; 22 | 23 | @Override 24 | protected int loadLayoutId() { 25 | return R.layout.common_title_recyclerview; 26 | } 27 | 28 | @Override 29 | protected void initViews() { 30 | mRefreshLayout = $(R.id.common_refresh_layout); 31 | mRecyclerView = $(R.id.common_recyclerview); 32 | } 33 | 34 | 35 | 36 | @Override 37 | protected void initData() { 38 | mRefreshLayout.setDisableContentWhenLoading(true); 39 | //设置LayoutManager 40 | mVirtualLayoutManager=new VirtualLayoutManager(this); 41 | mRecyclerView.setLayoutManager(mVirtualLayoutManager); 42 | //总adapter 43 | mDelegateAdapter= new DelegateAdapter(mVirtualLayoutManager, true); 44 | mRecyclerView.setAdapter(mDelegateAdapter); 45 | } 46 | 47 | 48 | 49 | 50 | @Override 51 | protected void onDestroy() { 52 | mRecyclerView = null; 53 | super.onDestroy(); 54 | } 55 | 56 | 57 | 58 | } 59 | -------------------------------------------------------------------------------- /app/src/main/java/com/mario/baseadapter/demo/data/AnalogData.java: -------------------------------------------------------------------------------- 1 | package com.mario.baseadapter.demo.data; 2 | 3 | 4 | import com.mario.baseadapter.demo.model.MainModel; 5 | import com.mario.baseadapter.demo.model.NormalModel; 6 | import com.mario.baseadapter.demo.model.Section2Model; 7 | import com.mario.baseadapter.demo.ui.EmptyActivity; 8 | import com.mario.baseadapter.demo.ui.HeraderAndFooterActivity; 9 | import com.mario.baseadapter.demo.ui.OnePlusNLayoutActivity; 10 | import com.mario.baseadapter.demo.ui.SectionedActivity; 11 | import com.mario.baseadapter.demo.ui.TaobaoActivity; 12 | 13 | import java.util.ArrayList; 14 | import java.util.List; 15 | 16 | 17 | /** 18 | * Date: 2016-12-15 19 | * Time: 11:18 20 | * Description:模拟数据 21 | */ 22 | public class AnalogData { 23 | 24 | public static List analogMainModel() { 25 | List array = new ArrayList<>(); 26 | array.add(new MainModel(HeraderAndFooterActivity.class, "添加头部和脚")); 27 | array.add(new MainModel(EmptyActivity.class, "空布局")); 28 | array.add(new MainModel(SectionedActivity.class, "分组+空布局")); 29 | array.add(new MainModel(OnePlusNLayoutActivity.class, "1拖N布局")); 30 | array.add(new MainModel(TaobaoActivity.class, "淘宝首页")); 31 | return array; 32 | } 33 | 34 | 35 | 36 | private static final String HTTPS_AVATARS1_GITHUBUSERCONTENT_COM_LINK = "http://cdn.duitang.com/uploads/item/201508/21/20150821201845_T5xBs.png"; 37 | private static final String CYM_CHAD = "吕檀溪"; 38 | 39 | 40 | public static List analogSection2Model(int pageNo) { 41 | List list = new ArrayList<>(); 42 | Section2Model model; 43 | for (int i = (pageNo - 1) * 10; i < pageNo * 10; i++) { 44 | model = new Section2Model("this is section" + i, i % 2 == 0); 45 | List videos = new ArrayList<>(); 46 | int count = i > 7 ? 6 : i; 47 | for (int j = 0; j < count; j++) { 48 | videos.add(new Section2Model.Video(HTTPS_AVATARS1_GITHUBUSERCONTENT_COM_LINK, CYM_CHAD)); 49 | } 50 | model.setVideos(videos); 51 | list.add(model); 52 | } 53 | return list; 54 | } 55 | 56 | public static List analogString(int pageNo) { 57 | List list = new ArrayList<>(); 58 | for (int i = (pageNo - 1) * 50; i < pageNo * 50; i++) { 59 | list.add("this is item : " + i); 60 | } 61 | return list; 62 | } 63 | 64 | public static List analogNormalModel() { 65 | List array = new ArrayList<>(); 66 | for (int i = 1; i < 4; i++) { 67 | array.add(new NormalModel("this is title" + i, "this is detail" + i, "")); 68 | } 69 | return array; 70 | } 71 | 72 | } 73 | -------------------------------------------------------------------------------- /app/src/main/java/com/mario/baseadapter/demo/holder/WaterHolder.java: -------------------------------------------------------------------------------- 1 | package com.mario.baseadapter.demo.holder; 2 | 3 | import android.view.View; 4 | import android.view.ViewGroup; 5 | import android.widget.ImageView; 6 | 7 | import com.mario.baseadapter.demo.R; 8 | import com.mario.baseadapter.demo.image.CustomImageLoader; 9 | import com.mario.baseadapter.demo.model.WaterCargo; 10 | import com.mario.baseadapter.demo.util.ScreenUtil; 11 | import com.mario.baseadapter.holder.VBaseHolder; 12 | import com.mario.baseadapter.holder.VBaseHolderHelper; 13 | 14 | 15 | public class WaterHolder extends VBaseHolder { 16 | 17 | public WaterHolder(View itemView) { 18 | super(itemView); 19 | } 20 | 21 | @Override 22 | public void convert(VBaseHolderHelper helper, WaterCargo waterCargo, int position) { 23 | ImageView mPic=helper.getView(R.id.pic); 24 | ViewGroup.LayoutParams params =mPic.getLayoutParams(); 25 | params.width = ScreenUtil.getScreenWidth(helper.getConvertView().getContext()) / 2 - 2; 26 | params.height = ScreenUtil.getScreenHeight(helper.getConvertView().getContext()) / 4 + (int)(Math.random()*100); 27 | CustomImageLoader.loadImage(mPic.getContext(),waterCargo.getPic_url(),mPic); 28 | helper.setText(R.id.title,waterCargo.getTitle()) 29 | .setText(R.id.price,"¥ " + waterCargo.getPrice()) 30 | .setText(R.id.num,waterCargo.getBuynum() + "人购买"); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/mario/baseadapter/demo/image/CustomGlideModule.java: -------------------------------------------------------------------------------- 1 | package com.mario.baseadapter.demo.image; 2 | 3 | import android.content.Context; 4 | 5 | import com.bumptech.glide.GlideBuilder; 6 | import com.bumptech.glide.annotation.GlideModule; 7 | import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory; 8 | import com.bumptech.glide.load.engine.cache.LruResourceCache; 9 | import com.bumptech.glide.load.engine.cache.MemorySizeCalculator; 10 | import com.bumptech.glide.module.AppGlideModule; 11 | 12 | /** 13 | * Date: 2017-11-13 14 | * Time: 15:39 15 | * Description:自定义 16 | */ 17 | @GlideModule 18 | public class CustomGlideModule extends AppGlideModule { 19 | //基本信息配置 20 | @Override 21 | public void applyOptions(Context context, GlideBuilder builder) { 22 | MemorySizeCalculator calculator = new MemorySizeCalculator.Builder(context) 23 | .setMemoryCacheScreens(2) 24 | .build(); 25 | //设置手机默认推荐缓存大小 26 | builder.setMemoryCache(new LruResourceCache(calculator.getMemoryCacheSize())); 27 | // 自定义缓存大小. 28 | int memoryCacheSizeBytes = 1024 * 1024 * 20; // 20mb 29 | builder.setMemoryCache(new LruResourceCache(memoryCacheSizeBytes)); 30 | //自定义内置磁盘缓存大小(可以指明路径) 31 | int diskCacheSizeBytes = 1024 * 1024 * 100; // 100 MB 32 | builder.setDiskCache(new InternalCacheDiskCacheFactory(context, diskCacheSizeBytes)); 33 | 34 | } 35 | 36 | //isManifestParsingEnabled 设置清单解析,设置为false,避免添加相同的modules两次 37 | @Override 38 | public boolean isManifestParsingEnabled() { 39 | return false; 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/mario/baseadapter/demo/image/CustomImageLoader.java: -------------------------------------------------------------------------------- 1 | package com.mario.baseadapter.demo.image; 2 | 3 | import android.content.Context; 4 | import android.widget.ImageView; 5 | 6 | import com.bumptech.glide.load.engine.DiskCacheStrategy; 7 | import com.youth.banner.loader.ImageLoader; 8 | 9 | /** 10 | * Date: 2017-11-13 11 | * Time: 15:47 12 | * Description: 13 | */ 14 | 15 | public class CustomImageLoader extends ImageLoader { 16 | 17 | @Override 18 | public void displayImage(Context context, Object path, ImageView imageView) { 19 | loadImage(context,path.toString(),imageView); 20 | } 21 | 22 | public static void loadImage(Context context, String path, ImageView imageView){ 23 | GlideApp.with(context).load(path).centerCrop().diskCacheStrategy(DiskCacheStrategy.ALL).into 24 | (imageView); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/mario/baseadapter/demo/model/BannerBean.java: -------------------------------------------------------------------------------- 1 | package com.mario.baseadapter.demo.model; 2 | 3 | import java.util.ArrayList; 4 | 5 | /** 6 | * Date: 2017-11-08 7 | * Time: 14:08 8 | * Description: 9 | */ 10 | 11 | public class BannerBean { 12 | private ArrayList pic_url; 13 | 14 | public BannerBean(ArrayList pic_url) { 15 | this.pic_url = pic_url; 16 | } 17 | 18 | public ArrayList getPic_url() { 19 | return pic_url; 20 | } 21 | 22 | public void setPic_url(ArrayList pic_url) { 23 | this.pic_url = pic_url; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/mario/baseadapter/demo/model/GridBean.java: -------------------------------------------------------------------------------- 1 | package com.mario.baseadapter.demo.model; 2 | 3 | /** 4 | * Date: 2017-11-08 5 | * Time: 14:08 6 | * Description: 7 | */ 8 | 9 | public class GridBean { 10 | private String pic_url; 11 | private String function; 12 | 13 | public GridBean(String pic_url, String function) { 14 | this.pic_url = pic_url; 15 | this.function = function; 16 | } 17 | 18 | public String getPic_url() { 19 | return pic_url; 20 | } 21 | 22 | public void setPic_url(String pic_url) { 23 | this.pic_url = pic_url; 24 | } 25 | 26 | public String getFunction() { 27 | return function; 28 | } 29 | 30 | public void setFunction(String function) { 31 | this.function = function; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/mario/baseadapter/demo/model/Headlines.java: -------------------------------------------------------------------------------- 1 | package com.mario.baseadapter.demo.model; 2 | 3 | /** 4 | * Date: 2017-11-08 5 | * Time: 14:08 6 | * Description: 7 | */ 8 | 9 | public class Headlines { 10 | private String url_pic; 11 | 12 | public Headlines(String url_pic) { 13 | this.url_pic = url_pic; 14 | } 15 | 16 | public String getUrl_pic() { 17 | return url_pic; 18 | } 19 | 20 | public void setUrl_pic(String url_pic) { 21 | this.url_pic = url_pic; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/mario/baseadapter/demo/model/HomeData.java: -------------------------------------------------------------------------------- 1 | package com.mario.baseadapter.demo.model; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * Date: 2017-11-08 8 | * Time: 14:08 9 | * Description: 10 | */ 11 | 12 | public class HomeData { 13 | private BannerBean banner; 14 | private ArrayList grid; 15 | private ArrayList headlines; 16 | private ArrayList tmarket; 17 | private ArrayList force; 18 | private ArrayList haohuo; 19 | private ArrayList watercargo; 20 | private List mSection2Models; 21 | 22 | public HomeData(BannerBean banner, ArrayList grid, ArrayList headlines, 23 | ArrayList tmarket) { 24 | this.banner = banner; 25 | this.grid = grid; 26 | this.headlines = headlines; 27 | this.tmarket = tmarket; 28 | } 29 | 30 | public BannerBean getBanner() { 31 | return banner; 32 | } 33 | 34 | public void setBanner(BannerBean banner) { 35 | this.banner = banner; 36 | } 37 | 38 | public ArrayList getGrid() { 39 | return grid; 40 | } 41 | 42 | public void setGrid(ArrayList grid) { 43 | this.grid = grid; 44 | } 45 | 46 | public ArrayList getHeadlines() { 47 | return headlines; 48 | } 49 | 50 | public void setHeadlines(ArrayList headlines) { 51 | this.headlines = headlines; 52 | } 53 | 54 | public ArrayList getTmarket() { 55 | return tmarket; 56 | } 57 | 58 | public void setTmarket(ArrayList tmarket) { 59 | this.tmarket = tmarket; 60 | } 61 | 62 | public ArrayList getForce() { 63 | return force; 64 | } 65 | 66 | public void setForce(ArrayList force) { 67 | this.force = force; 68 | } 69 | 70 | public ArrayList getHaohuo() { 71 | return haohuo; 72 | } 73 | 74 | public void setHaohuo(ArrayList haohuo) { 75 | this.haohuo = haohuo; 76 | } 77 | 78 | public ArrayList getWatercargo() { 79 | return watercargo; 80 | } 81 | 82 | public void setWatercargo(ArrayList watercargo) { 83 | this.watercargo = watercargo; 84 | } 85 | 86 | public List getSection2Models() { 87 | return mSection2Models; 88 | } 89 | 90 | public void setSection2Models(List section2Models) { 91 | mSection2Models = section2Models; 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /app/src/main/java/com/mario/baseadapter/demo/model/MainModel.java: -------------------------------------------------------------------------------- 1 | package com.mario.baseadapter.demo.model; 2 | 3 | /** 4 | * Date: 2016-12-15 5 | * Time: 11:18 6 | * Description: 7 | */ 8 | public class MainModel { 9 | 10 | private String name; 11 | private Class mCl; 12 | 13 | public MainModel() { 14 | } 15 | 16 | public MainModel(Class cl, String name) { 17 | mCl = cl; 18 | this.name = name; 19 | } 20 | 21 | public String getName() { 22 | return name; 23 | } 24 | 25 | public void setName(String name) { 26 | this.name = name; 27 | } 28 | 29 | public Class getCl() { 30 | return mCl; 31 | } 32 | 33 | public void setCl(Class cl) { 34 | mCl = cl; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/mario/baseadapter/demo/model/NormalModel.java: -------------------------------------------------------------------------------- 1 | package com.mario.baseadapter.demo.model; 2 | 3 | public class NormalModel { 4 | public String title; 5 | public String detail; 6 | public String avatorPath; 7 | public boolean selected; 8 | 9 | public NormalModel() { 10 | } 11 | 12 | public NormalModel(String title, String detail, String avatorPath) { 13 | this.title = title; 14 | this.detail = detail; 15 | this.avatorPath = avatorPath; 16 | } 17 | 18 | public String getTitle() { 19 | return title; 20 | } 21 | 22 | public void setTitle(String title) { 23 | this.title = title; 24 | } 25 | 26 | public String getDetail() { 27 | return detail; 28 | } 29 | 30 | public void setDetail(String detail) { 31 | this.detail = detail; 32 | } 33 | 34 | public String getAvatorPath() { 35 | return avatorPath; 36 | } 37 | 38 | public void setAvatorPath(String avatorPath) { 39 | this.avatorPath = avatorPath; 40 | } 41 | 42 | public boolean isSelected() { 43 | return selected; 44 | } 45 | 46 | public void setSelected(boolean selected) { 47 | this.selected = selected; 48 | } 49 | } -------------------------------------------------------------------------------- /app/src/main/java/com/mario/baseadapter/demo/model/Section2Model.java: -------------------------------------------------------------------------------- 1 | package com.mario.baseadapter.demo.model; 2 | 3 | 4 | import java.util.List; 5 | 6 | /** 7 | * Date: 2016-12-15 8 | * Time: 19:42 9 | * Description: 10 | */ 11 | public class Section2Model { 12 | private boolean isMroe; 13 | private List