├── .gitignore
├── .idea
├── compiler.xml
├── copyright
│ └── profiles_settings.xml
├── encodings.xml
├── gradle.xml
├── markdown-navigator.xml
├── markdown-navigator
│ └── profiles_settings.xml
├── misc.xml
├── modules.xml
├── runConfigurations.xml
└── vcs.xml
├── LICENSE
├── README.md
├── apkfile
└── zuiyue最阅-release.apk
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ ├── com
│ │ └── dch
│ │ │ └── test
│ │ │ ├── adapter
│ │ │ └── swipemenu
│ │ │ │ ├── DragTouchAdapter.java
│ │ │ │ ├── MainItemAdapter.java
│ │ │ │ ├── MenuAdapter.java
│ │ │ │ ├── MenuCardAdapter.java
│ │ │ │ ├── MenuVerticalAdapter.java
│ │ │ │ ├── MenuViewPagerAdapter.java
│ │ │ │ ├── MenuViewTypeAdapter.java
│ │ │ │ └── OnItemClickListener.java
│ │ │ ├── base
│ │ │ ├── BaseActivity.java
│ │ │ ├── BaseApplication.java
│ │ │ ├── BaseFragment.java
│ │ │ ├── BaseLoadLayoutFragment.java
│ │ │ ├── BasePresenter.java
│ │ │ ├── BaseView.java
│ │ │ └── adapter
│ │ │ │ ├── ListBaseAdapter.java
│ │ │ │ └── SuperViewHolder.java
│ │ │ ├── contract
│ │ │ ├── DetailsContract.kt
│ │ │ ├── HomeContract.java
│ │ │ └── presenter
│ │ │ │ ├── DetailsPresenter.kt
│ │ │ │ └── HomePresenter.java
│ │ │ ├── db
│ │ │ └── MyFavoriteLocalDataSource.kt
│ │ │ ├── di
│ │ │ ├── activity
│ │ │ │ ├── HomeActivityComponent.java
│ │ │ │ ├── HomeActivityModule.java
│ │ │ │ └── HomePresenterModule.java
│ │ │ ├── app
│ │ │ │ ├── AppComponent.java
│ │ │ │ └── AppModule.java
│ │ │ └── scope
│ │ │ │ ├── ActivityScope.java
│ │ │ │ └── FragmentScope.java
│ │ │ ├── entity
│ │ │ ├── MyFavorite.java
│ │ │ ├── MyFavoriteCollect.kt
│ │ │ └── ViewTypeBean.java
│ │ │ ├── manager
│ │ │ ├── DBManager.java
│ │ │ ├── RequestManager.kt
│ │ │ ├── RetrofitManager.java
│ │ │ └── SpfManager.java
│ │ │ ├── remote
│ │ │ └── MusicService.java
│ │ │ ├── repository
│ │ │ ├── ArticalDataSource.java
│ │ │ ├── ArticalRepository.java
│ │ │ ├── ArticalRepositoryComponent.java
│ │ │ ├── ArticalRepositoryModule.java
│ │ │ ├── Remote.java
│ │ │ ├── entity
│ │ │ │ ├── Artical.java
│ │ │ │ ├── BaseEntity.java
│ │ │ │ ├── GankEntity.java
│ │ │ │ └── User.java
│ │ │ ├── local
│ │ │ │ └── ArticalLocalDataSource.java
│ │ │ └── remote
│ │ │ │ ├── ArticalRemoteDataSource.java
│ │ │ │ ├── CSDNApi.java
│ │ │ │ ├── HttpResult.java
│ │ │ │ ├── Local.java
│ │ │ │ └── apistores
│ │ │ │ ├── CsdnApiService.java
│ │ │ │ └── GankApiService.java
│ │ │ ├── ui
│ │ │ ├── CardAdapter.kt
│ │ │ ├── CloseFabEvent.kt
│ │ │ ├── CustomLeftDrawerActivity.java
│ │ │ ├── DetailActivity.java
│ │ │ ├── FabCloseEvent.java
│ │ │ ├── GameActivity.java
│ │ │ ├── GuideActivity.java
│ │ │ ├── HomeActivity.java
│ │ │ ├── KotlinPhotoViewActivity.kt
│ │ │ ├── KotlinScrollingActivity.kt
│ │ │ ├── KotlinSettingsActivity.kt
│ │ │ ├── KotlinWebDetailsActivity.kt
│ │ │ ├── LeadActivity.java
│ │ │ ├── SplashActivity.java
│ │ │ ├── fragment
│ │ │ │ ├── GankAndroidFragment.java
│ │ │ │ ├── GankMeiziFragment.java
│ │ │ │ └── HomeFragment.java
│ │ │ └── test
│ │ │ │ ├── TestFragment.java
│ │ │ │ └── TestViewActivity.java
│ │ │ ├── util
│ │ │ ├── ActivityUtils.java
│ │ │ ├── Config.java
│ │ │ ├── CrashHandler.java
│ │ │ ├── FloatingCustomBehavior.java
│ │ │ ├── NetUtil.java
│ │ │ ├── RxBus.java
│ │ │ ├── SharePreferenceUtils.java
│ │ │ ├── StatusBarUtils.java
│ │ │ ├── ToastUtils.java
│ │ │ ├── TransitionUtils.java
│ │ │ ├── UIUtils.java
│ │ │ └── convertfactory
│ │ │ │ ├── StringConverterFactory.java
│ │ │ │ ├── StringRequestBodyConverter.java
│ │ │ │ └── StringResponseBodyConverter.java
│ │ │ └── widget
│ │ │ ├── BounceScrollView.java
│ │ │ ├── ChrysanthemumLoadingView.java
│ │ │ ├── CircleProgressBar.java
│ │ │ ├── CountDownProgressBar.java
│ │ │ ├── CustomVolumControlBar.java
│ │ │ ├── FiveChessesView.java
│ │ │ ├── LeftDrawerLayout.java
│ │ │ ├── LoadingView.java
│ │ │ ├── MaterialProgressDrawable.java
│ │ │ ├── PlaneFloating.java
│ │ │ ├── PullWaveView.java
│ │ │ ├── SwipeLayout.java
│ │ │ ├── WaterRefreshView.java
│ │ │ ├── WaterView.java
│ │ │ └── banner
│ │ │ ├── BezierIndicatorView.java
│ │ │ ├── BezierIndicatorView2.java
│ │ │ └── BezierPathIndicatorView.java
│ └── greendao
│ │ └── gen
│ │ ├── DaoMaster.java
│ │ ├── DaoSession.java
│ │ └── MyFavoriteDao.java
│ └── res
│ ├── animator
│ ├── jrtt_path_one.xml
│ ├── jrtt_path_three.xml
│ ├── jrtt_path_two.xml
│ └── tick_path.xml
│ ├── drawable-v21
│ ├── ic_menu_camera.xml
│ ├── ic_menu_gallery.xml
│ ├── ic_menu_manage.xml
│ ├── ic_menu_send.xml
│ ├── ic_menu_share.xml
│ └── ic_menu_slideshow.xml
│ ├── drawable-xhdpi
│ ├── black.png
│ ├── delete.png
│ ├── floating_plane.png
│ ├── guide1.jpg
│ ├── guide2.jpg
│ ├── guide3.jpg
│ ├── guide4.jpg
│ ├── like.png
│ ├── pic4.jpg
│ ├── star.png
│ ├── timg3.jpg
│ └── white.png
│ ├── drawable
│ ├── coner_framelayout_bg.xml
│ ├── divider_recycler.xml
│ ├── ic_info_black_24dp.xml
│ ├── ic_notifications_black_24dp.xml
│ ├── ic_sync_black_24dp.xml
│ ├── jrtt.xml
│ ├── jrtt_vector.xml
│ ├── select_white.xml
│ ├── selector_green.xml
│ ├── selector_purple.xml
│ ├── selector_red.xml
│ ├── side_nav_bar.xml
│ ├── tick.xml
│ ├── tick_vector.xml
│ └── water_progressbar.xml
│ ├── layout
│ ├── activity_custom_left_drawer.xml
│ ├── activity_details.xml
│ ├── activity_game.xml
│ ├── activity_guide.xml
│ ├── activity_home.xml
│ ├── activity_kotlin_photo_view.xml
│ ├── activity_kotlin_scrolling.xml
│ ├── activity_kotlin_settings.xml
│ ├── activity_kotlin_web_details.xml
│ ├── activity_lead.xml
│ ├── activity_main.xml
│ ├── activity_splash.xml
│ ├── activity_test_view.xml
│ ├── app_bar_home.xml
│ ├── card_item_photoview.xml
│ ├── content_home.xml
│ ├── edit_layout.xml
│ ├── fragment_base_loadlayout.xml
│ ├── fragment_tab1.xml
│ ├── fragment_tab2.xml
│ ├── item_csdn.xml
│ ├── item_drag_touch.xml
│ ├── item_gank.xml
│ ├── item_main.xml
│ ├── item_meizi.xml
│ ├── item_menu.xml
│ ├── item_menu_card.xml
│ ├── item_menu_vertical.xml
│ ├── nav_header_home.xml
│ └── refresh_header_waterview.xml
│ ├── menu
│ ├── activity_home_drawer.xml
│ ├── home.xml
│ ├── menu_kotlin_scrolling.xml
│ ├── menu_lead.xml
│ └── menu_test.xml
│ ├── mipmap-hdpi
│ └── ic_launcher_round.png
│ ├── mipmap-mdpi
│ └── ic_launcher_round.png
│ ├── mipmap-xhdpi
│ ├── applogo.png
│ ├── ic_launcher.jpg
│ ├── ic_launcher_round.png
│ ├── rate_star_big_on_holo_dark.png
│ ├── timg.jpg
│ ├── timg1.jpg
│ └── timg2.jpg
│ ├── mipmap-xxhdpi
│ ├── ic_action_add.png
│ ├── ic_action_close.png
│ ├── ic_action_delete.png
│ ├── ic_action_module_black.png
│ ├── ic_action_wechat.png
│ └── ic_launcher_round.png
│ ├── mipmap-xxxhdpi
│ └── ic_launcher_round.png
│ ├── transition
│ ├── changebounds.xml
│ └── explode.xml
│ ├── values-w820dp
│ └── dimens.xml
│ ├── values
│ ├── attrs.xml
│ ├── colors.xml
│ ├── dimens.xml
│ ├── drawables.xml
│ ├── strings.xml
│ └── styles.xml
│ └── xml
│ ├── pref_data_sync.xml
│ ├── pref_general.xml
│ ├── pref_headers.xml
│ └── pref_notification.xml
├── build.gradle
├── common
├── .gitignore
├── build.gradle
├── libs
│ └── tbs_sdk_thirdapp_v3.1.0.1034_43100_sharewithdownload_obfs_20170301_182143.jar
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── dch
│ │ └── common
│ │ └── ExampleInstrumentedTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ └── res
│ │ └── values
│ │ └── strings.xml
│ └── test
│ └── java
│ └── com
│ └── dch
│ └── common
│ └── ExampleUnitTest.java
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── library
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── view
│ │ └── jameson
│ │ └── library
│ │ └── ApplicationTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ │ └── view
│ │ │ └── jameson
│ │ │ └── library
│ │ │ ├── CardAdapterHelper.java
│ │ │ ├── CardLinearSnapHelper.java
│ │ │ ├── CardScaleHelper.java
│ │ │ └── SpeedRecyclerView.java
│ └── res
│ │ └── values
│ │ └── strings.xml
│ └── test
│ └── java
│ └── com
│ └── view
│ └── jameson
│ └── library
│ └── ExampleUnitTest.java
├── pic
├── 1.jpg
├── 111.gif
├── 222.gif
├── countdown.gif
├── loadingview.gif
├── pic2.jpg
├── pic3.jpg
├── pic4.jpg
├── qq.gif
├── revealanimator.gif
└── wx_pay.jpg
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea
5 | /.idea/workspace.xml
6 | /.idea/libraries
7 | .DS_Store
8 | /build
9 | /captures
10 | .externalNativeBuild
11 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/.idea/copyright/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
20 |
21 |
--------------------------------------------------------------------------------
/.idea/markdown-navigator/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # KotlinMVPRxJava2Dagger2GreenDaoRetrofitDemo
2 | Kotlin+RxJava2+Dagger2+RxCache+Retrofit+GoogleMVPMode+GreenDao
3 |
4 | An android app example that I exercise.
5 |
6 | 在这个app中,你可以看到一些最新的android技术文章,可以进行收藏,然后进入我的收藏中查看已收藏的文章.
7 | 在敲累的时候你还可以进入妹纸模块,查看养眼的妹纸图...
8 | 这个项目还在完善中,存在一些bug, 还请指出,见谅!
9 |
10 | 体验app: [点我!](https://github.com/MrDeclanCoder/KotlinMVPRxJava2Dagger2GreenDaoRetrofitDemo/blob/master/apkfile/zuiyue%E6%9C%80%E9%98%85-release.apk)
11 |
12 | # 欢迎页
13 | 利用RxJava2实现右上角倒计时功能.
14 | ps:倒计时已更新,自定义ProgressBar
15 |
16 | 
17 |
18 | 老版本中倒计时:
19 |
20 | 
21 |
22 | #仿ios版qq下拉刷新
23 |
24 | 
25 |
26 | #揭示动画
27 |
28 | 
29 |
30 | # 引导页
31 | 贝塞尔效果切页指示器
32 |
33 | 
34 |
35 | #仿IOS菊花loading效果
36 | 具体实现请查看: [csdn博客](http://blog.csdn.net/coderder/article/details/75009723)
37 |
38 | 
39 |
40 | #自定义view 五子棋(ps:gif录制有丢帧现象,具体效果还要安装试看)
41 |
42 | 
43 |
44 | /***** 未完待续 *****/
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/apkfile/zuiyue最阅-release.apk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MrDeclanCoder/KotlinMVPRxJava2Dagger2GreenDaoRetrofitDemo/ff71c1be21d82952d8c973e1d066cf1d031a7731/apkfile/zuiyue最阅-release.apk
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | signing.properties
3 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 | apply plugin: 'me.tatarka.retrolambda'
3 | apply plugin: 'kotlin-android'
4 | apply plugin: 'kotlin-android-extensions'
5 |
6 | Properties properties = new Properties()
7 | properties.load(new FileInputStream(file("signing.properties")))
8 | android {
9 | compileSdkVersion 25
10 | buildToolsVersion rootProject.buildToolsVersion
11 | defaultConfig {
12 | applicationId "com.dch.test"
13 | minSdkVersion 21
14 | targetSdkVersion 25
15 | versionCode 1
16 | versionName "1.0"
17 | // Enabling multidex support.
18 | multiDexEnabled true
19 | vectorDrawables.useSupportLibrary = true
20 | }
21 |
22 | signingConfigs {
23 | release {
24 | keyAlias properties['KEY_ALIAS']
25 | keyPassword properties['KEY_PASSWORD']
26 | storeFile file(properties['KEYSTORE_FILE'])
27 | storePassword properties['KEYSTORE_PASSWORD']
28 | }
29 | }
30 |
31 | buildTypes {
32 | release {
33 | signingConfig signingConfigs.release
34 | minifyEnabled false
35 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
36 | }
37 | }
38 |
39 | // 注释冲突
40 | packagingOptions {
41 | exclude 'META-INF/services/javax.annotation.processing.Processor'
42 | }
43 |
44 | // 使用Java1.8
45 | // compileOptions {
46 | // sourceCompatibility JavaVersion.VERSION_1_8
47 | // targetCompatibility JavaVersion.VERSION_1_8
48 | // }
49 | packagingOptions {
50 | exclude 'META-INF/DEPENDENCIES'
51 | exclude 'META-INF/NOTICE'
52 | exclude 'META-INF/LICENSE'
53 | exclude 'META-INF/LICENSE.txt'
54 | exclude 'META-INF/NOTICE.txt'
55 | }
56 | dexOptions {
57 | //最大堆内存
58 | javaMaxHeapSize "8g"
59 | //是否支持大工程模式
60 | jumboMode = true
61 | //预编译
62 | preDexLibraries = true
63 | //线程数
64 | threadCount = 8
65 | }
66 |
67 | }
68 |
69 | dependencies {
70 | compile fileTree(include: ['*.jar'], dir: 'libs')
71 | compile project(':common')
72 | compile project(':library')
73 | // dagger 2 的配置
74 | compile 'com.google.dagger:dagger:' + rootProject.daggerVersion
75 | compile 'com.google.dagger:dagger-android-support:' + rootProject.daggerVersion
76 | compile 'com.google.dagger:dagger-android:' + rootProject.daggerVersion
77 | annotationProcessor 'com.google.dagger:dagger-compiler:' + rootProject.daggerVersion
78 | annotationProcessor 'com.google.dagger:dagger-android-processor:' + rootProject.daggerVersion
79 | //butterknife
80 | compile 'com.jakewharton:butterknife:' + rootProject.buterknifeVersion
81 | annotationProcessor 'com.jakewharton:butterknife-compiler:' + rootProject.buterknifeVersion
82 | compile 'com.android.support:support-v4:25.3.1'
83 | compile 'com.android.support:support-vector-drawable:25.3.1'
84 | compile 'com.android.support.constraint:constraint-layout:1.0.2'
85 | }
86 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in D:\develop\android\sdk\android-sdk-windows\android-sdk-windows/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
19 | # Uncomment this to preserve the line number information for
20 | # debugging stack traces.
21 | #-keepattributes SourceFile,LineNumberTable
22 |
23 | # If you keep the line number information, uncomment this to
24 | # hide the original source file name.
25 | #-renamesourcefileattribute SourceFile
26 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
21 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
35 |
38 |
41 |
45 |
49 |
50 |
53 |
56 |
59 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dch/test/adapter/swipemenu/MainItemAdapter.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 Yan Zhenjie
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.dch.test.adapter.swipemenu;
17 |
18 | import android.support.v7.widget.RecyclerView;
19 | import android.view.LayoutInflater;
20 | import android.view.View;
21 | import android.view.ViewGroup;
22 | import android.widget.TextView;
23 |
24 | import com.dch.test.R;
25 |
26 | import java.util.List;
27 |
28 | /**
29 | * Created by YOLANDA on 2016/7/22.
30 | */
31 | public class MainItemAdapter extends RecyclerView.Adapter {
32 |
33 | private List titles;
34 |
35 | private List descriptions;
36 |
37 | private OnItemClickListener mOnItemClickListener;
38 |
39 | public MainItemAdapter(List titles, List descriptions) {
40 | this.titles = titles;
41 | this.descriptions = descriptions;
42 | }
43 |
44 | public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
45 | this.mOnItemClickListener = onItemClickListener;
46 | }
47 |
48 | @Override
49 | public int getItemCount() {
50 | return titles == null ? 0 : titles.size();
51 | }
52 |
53 | @Override
54 | public DefaultViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
55 | DefaultViewHolder viewHolder = new DefaultViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout
56 | .item_main, parent, false));
57 | viewHolder.mOnItemClickListener = mOnItemClickListener;
58 | return viewHolder;
59 | }
60 |
61 | @Override
62 | public void onBindViewHolder(DefaultViewHolder holder, int position) {
63 | holder.setData(titles.get(position), descriptions.get(position));
64 | }
65 |
66 | static class DefaultViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
67 | TextView tvTitle;
68 | TextView tvDescription;
69 | OnItemClickListener mOnItemClickListener;
70 |
71 | public DefaultViewHolder(View itemView) {
72 | super(itemView);
73 | itemView.setOnClickListener(this);
74 | tvTitle = (TextView) itemView.findViewById(R.id.tv_title);
75 | tvDescription = (TextView) itemView.findViewById(R.id.tv_des);
76 | }
77 |
78 | public void setData(String title, String des) {
79 | this.tvTitle.setText(title);
80 | this.tvDescription.setText(des);
81 | }
82 |
83 | @Override
84 | public void onClick(View v) {
85 | if (mOnItemClickListener != null) {
86 | mOnItemClickListener.onItemClick(getAdapterPosition());
87 | }
88 | }
89 | }
90 |
91 | }
92 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dch/test/adapter/swipemenu/MenuAdapter.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 Yan Zhenjie
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.dch.test.adapter.swipemenu;
17 |
18 | import android.support.v7.widget.RecyclerView;
19 | import android.view.LayoutInflater;
20 | import android.view.View;
21 | import android.view.ViewGroup;
22 | import android.widget.TextView;
23 |
24 | import com.dch.test.R;
25 | import com.yanzhenjie.recyclerview.swipe.SwipeMenuAdapter;
26 |
27 | import java.util.List;
28 |
29 | /**
30 | * Created by YOLANDA on 2016/7/22.
31 | */
32 | public class MenuAdapter extends SwipeMenuAdapter {
33 |
34 | private List titles;
35 |
36 | private OnItemClickListener mOnItemClickListener;
37 |
38 | public MenuAdapter(List titles) {
39 | this.titles = titles;
40 | }
41 |
42 | public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
43 | this.mOnItemClickListener = onItemClickListener;
44 | }
45 |
46 | @Override
47 | public int getItemCount() {
48 | return titles == null ? 0 : titles.size();
49 | }
50 |
51 | @Override
52 | public View onCreateContentView(ViewGroup parent, int viewType) {
53 | return LayoutInflater.from(parent.getContext()).inflate(R.layout.item_menu, parent, false);
54 | }
55 |
56 | @Override
57 | public DefaultViewHolder onCompatCreateViewHolder(View realContentView, int viewType) {
58 | DefaultViewHolder viewHolder = new DefaultViewHolder(realContentView);
59 | viewHolder.mOnItemClickListener = mOnItemClickListener;
60 | return viewHolder;
61 | }
62 |
63 | @Override
64 | public void onBindViewHolder(DefaultViewHolder holder, int position) {
65 | holder.setData(titles.get(position));
66 | }
67 |
68 | static class DefaultViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
69 | TextView tvTitle;
70 | OnItemClickListener mOnItemClickListener;
71 |
72 | public DefaultViewHolder(View itemView) {
73 | super(itemView);
74 | itemView.setOnClickListener(this);
75 | tvTitle = (TextView) itemView.findViewById(R.id.tv_title);
76 | }
77 |
78 | public void setData(String title) {
79 | this.tvTitle.setText(title);
80 | }
81 |
82 | @Override
83 | public void onClick(View v) {
84 | if (mOnItemClickListener != null) {
85 | mOnItemClickListener.onItemClick(getAdapterPosition());
86 | }
87 | }
88 | }
89 |
90 | }
91 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dch/test/adapter/swipemenu/MenuCardAdapter.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 Yan Zhenjie
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.dch.test.adapter.swipemenu;
17 |
18 | import android.support.v7.widget.CardView;
19 | import android.support.v7.widget.RecyclerView;
20 | import android.view.LayoutInflater;
21 | import android.view.View;
22 | import android.view.ViewGroup;
23 | import android.widget.TextView;
24 |
25 | import com.dch.test.R;
26 |
27 | import java.util.List;
28 |
29 | /**
30 | * Created by YOLANDA on 2016/7/22.
31 | */
32 | public class MenuCardAdapter extends RecyclerView.Adapter {
33 |
34 | private List titles;
35 |
36 | private OnItemClickListener mOnItemClickListener;
37 |
38 | public MenuCardAdapter(List titles) {
39 | this.titles = titles;
40 | }
41 |
42 | public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
43 | this.mOnItemClickListener = onItemClickListener;
44 | }
45 |
46 | @Override
47 | public int getItemCount() {
48 | return titles == null ? 0 : titles.size();
49 | }
50 |
51 | @Override
52 | public DefaultViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
53 | DefaultViewHolder viewHolder = new DefaultViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout
54 | .item_menu_card, parent, false));
55 | viewHolder.mOnItemClickListener = mOnItemClickListener;
56 | return viewHolder;
57 | }
58 |
59 | @Override
60 | public void onBindViewHolder(DefaultViewHolder holder, int position) {
61 | holder.setData(titles.get(position));
62 | }
63 |
64 | static class DefaultViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
65 | TextView tvTitle;
66 | OnItemClickListener mOnItemClickListener;
67 |
68 | public DefaultViewHolder(View itemView) {
69 | super(itemView);
70 | ((CardView) itemView).getChildAt(0).setOnClickListener(this);
71 | tvTitle = (TextView) itemView.findViewById(R.id.tv_title);
72 | }
73 |
74 | public void setData(String title) {
75 | this.tvTitle.setText(title);
76 | }
77 |
78 | @Override
79 | public void onClick(View v) {
80 | if (mOnItemClickListener != null) {
81 | mOnItemClickListener.onItemClick(getAdapterPosition());
82 | }
83 | }
84 | }
85 |
86 | }
87 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dch/test/adapter/swipemenu/MenuVerticalAdapter.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 Yan Zhenjie
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.dch.test.adapter.swipemenu;
17 |
18 | import android.support.v7.widget.RecyclerView;
19 | import android.view.LayoutInflater;
20 | import android.view.View;
21 | import android.view.ViewGroup;
22 | import android.widget.TextView;
23 |
24 | import com.dch.test.R;
25 | import com.yanzhenjie.recyclerview.swipe.SwipeMenuAdapter;
26 |
27 | import java.util.List;
28 |
29 | /**
30 | * 竖向排布菜单的适配器。
31 | * Created by YOLANDA on 2016/7/22.
32 | */
33 | public class MenuVerticalAdapter extends SwipeMenuAdapter {
34 |
35 | private List titles;
36 |
37 | private OnItemClickListener mOnItemClickListener;
38 |
39 | public MenuVerticalAdapter(List titles) {
40 | this.titles = titles;
41 | }
42 |
43 | public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
44 | this.mOnItemClickListener = onItemClickListener;
45 | }
46 |
47 | @Override
48 | public int getItemCount() {
49 | return titles == null ? 0 : titles.size();
50 | }
51 |
52 | @Override
53 | public View onCreateContentView(ViewGroup parent, int viewType) {
54 | return LayoutInflater.from(parent.getContext()).inflate(R.layout.item_menu_vertical, parent, false);
55 | }
56 |
57 | @Override
58 | public DefaultViewHolder onCompatCreateViewHolder(View realContentView, int viewType) {
59 | DefaultViewHolder viewHolder = new DefaultViewHolder(realContentView);
60 | viewHolder.mOnItemClickListener = mOnItemClickListener;
61 | return viewHolder;
62 | }
63 |
64 | @Override
65 | public void onBindViewHolder(DefaultViewHolder holder, int position) {
66 | holder.setData(titles.get(position));
67 | }
68 |
69 | static class DefaultViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
70 | TextView tvTitle;
71 | OnItemClickListener mOnItemClickListener;
72 |
73 | public DefaultViewHolder(View itemView) {
74 | super(itemView);
75 | itemView.setOnClickListener(this);
76 | tvTitle = (TextView) itemView.findViewById(R.id.tv_title);
77 | }
78 |
79 | public void setData(String title) {
80 | this.tvTitle.setText(title);
81 | }
82 |
83 | @Override
84 | public void onClick(View v) {
85 | if (mOnItemClickListener != null) {
86 | mOnItemClickListener.onItemClick(getAdapterPosition());
87 | }
88 | }
89 | }
90 |
91 | }
92 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dch/test/adapter/swipemenu/MenuViewPagerAdapter.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 Yan Zhenjie
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.dch.test.adapter.swipemenu;
17 |
18 | import android.support.v4.app.Fragment;
19 | import android.support.v4.app.FragmentManager;
20 | import android.support.v4.app.FragmentPagerAdapter;
21 |
22 | import java.util.List;
23 |
24 | /**
25 | * Created by Yan Zhenjie on 2016/8/12.
26 | */
27 | public class MenuViewPagerAdapter extends FragmentPagerAdapter {
28 |
29 | private List fragments;
30 |
31 | public MenuViewPagerAdapter(FragmentManager fragmentManager, List fragments) {
32 | super(fragmentManager);
33 | this.fragments = fragments;
34 | }
35 |
36 | @Override
37 | public int getCount() {
38 | return fragments == null ? 0 : fragments.size();
39 | }
40 |
41 | @Override
42 | public Fragment getItem(int position) {
43 | return fragments.get(position);
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dch/test/adapter/swipemenu/OnItemClickListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 Yan Zhenjie
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package com.dch.test.adapter.swipemenu;
17 |
18 | /**
19 | * Created by Yan Zhenjie on 2016/7/27.
20 | */
21 | public interface OnItemClickListener {
22 |
23 | void onItemClick(int position);
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dch/test/base/BaseActivity.java:
--------------------------------------------------------------------------------
1 | package com.dch.test.base;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 | import android.support.v7.app.AppCompatActivity;
6 | import android.transition.Explode;
7 | import android.transition.Slide;
8 |
9 | import com.dch.test.R;
10 | import com.dch.test.util.StatusBarUtils;
11 | import com.gyf.barlibrary.ImmersionBar;
12 |
13 | import butterknife.ButterKnife;
14 | import butterknife.Unbinder;
15 |
16 | /**
17 | * 作者:${User} on 2017/4/10 16:26
18 | * 描述:
19 | * 邮箱:daichuanhao@caijinquan.com
20 | */
21 | public abstract class BaseActivity extends AppCompatActivity{
22 |
23 | public Unbinder unbinder;
24 |
25 | @Override
26 | protected void onCreate(@Nullable Bundle savedInstanceState) {
27 | super.onCreate(savedInstanceState);
28 | //初始化
29 | // ImmersionBar.with(this)
30 | // .statusBarColor(R.color.colorPrimary) //状态栏颜色,不写默认透明色
31 | // .statusBarColorTransform(R.color.colorPrimary) //状态栏变色后的颜色
32 | // .init();
33 | baseOnCreate();
34 | }
35 |
36 | public void baseOnCreate(){
37 | setContentView(setLayoutId());
38 | unbinder = ButterKnife.bind(this);
39 | // initInject();
40 | initView();
41 | initData();
42 | }
43 |
44 | protected abstract void initData();
45 |
46 | protected abstract void initView();
47 |
48 | protected abstract int setLayoutId();
49 |
50 | @Override
51 | protected void onDestroy() {
52 | super.onDestroy();
53 | unbinder.unbind();
54 | ImmersionBar.with(this).destroy(); //不调用该方法,如果界面bar发生改变,在不关闭app的情况下,退出此界面再进入将记忆最后一次bar改变的状态
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dch/test/base/BaseApplication.java:
--------------------------------------------------------------------------------
1 | package com.dch.test.base;
2 |
3 | import android.database.sqlite.SQLiteDatabase;
4 | import android.support.multidex.MultiDexApplication;
5 |
6 | import com.dch.test.di.app.AppModule;
7 | import com.dch.test.repository.ArticalRepositoryComponent;
8 | //import com.dch.test.repository.DaggerArticalRepositoryComponent;
9 | import com.dch.test.repository.DaggerArticalRepositoryComponent;
10 | import com.dch.test.util.CrashHandler;
11 |
12 | import greendao.gen.DaoMaster;
13 | import greendao.gen.DaoSession;
14 |
15 | /**
16 | * 作者:${User} on 2017/4/10 16:41
17 | * 描述:
18 | * 邮箱:daichuanhao@caijinquan.com
19 | */
20 | public class BaseApplication extends MultiDexApplication {
21 | public static BaseApplication application;
22 | private ArticalRepositoryComponent articalRepositoryComponent;
23 | private DaoMaster.DevOpenHelper devOpenHelper;
24 | private SQLiteDatabase writableDatabase;
25 | private DaoMaster daoMaster;
26 | private DaoSession daoSession;
27 |
28 | @Override
29 | public void onCreate() {
30 | super.onCreate();
31 | application = this;
32 |
33 | // CrashHandler crashHandler = CrashHandler.getInstance();
34 | // crashHandler.init(this);
35 |
36 | articalRepositoryComponent = DaggerArticalRepositoryComponent.builder()
37 | .appModule(new AppModule((getApplicationContext())))
38 | .build();
39 | DatabaseInit();
40 | }
41 |
42 | private void DatabaseInit() {
43 | devOpenHelper = new DaoMaster.DevOpenHelper(this,"collect-db");
44 | writableDatabase = devOpenHelper.getWritableDatabase();
45 | daoMaster = new DaoMaster(writableDatabase);
46 | daoSession = daoMaster.newSession();
47 | }
48 |
49 | public SQLiteDatabase getWritableDatabase() {
50 | return writableDatabase;
51 | }
52 |
53 | public DaoSession getDaoSession() {
54 | return daoSession;
55 | }
56 |
57 | public ArticalRepositoryComponent getArticalRepositoryComponent(){
58 | return articalRepositoryComponent;
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dch/test/base/BaseFragment.java:
--------------------------------------------------------------------------------
1 | package com.dch.test.base;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 | import android.support.v4.app.Fragment;
6 | import android.support.v7.app.AppCompatActivity;
7 | import android.view.LayoutInflater;
8 | import android.view.View;
9 | import android.view.ViewGroup;
10 |
11 | import com.dch.test.contract.HomeContract;
12 |
13 | import butterknife.ButterKnife;
14 | import butterknife.Unbinder;
15 |
16 | /**
17 | * 作者:Dch on 2017/4/11 12:04
18 | * 描述:
19 | * 邮箱:daichuanhao@caijinquan.com
20 | */
21 | public abstract class BaseFragment extends Fragment implements HomeContract.View{
22 |
23 | protected AppCompatActivity activity;
24 | protected View rootView;
25 | protected Unbinder unbinder;
26 |
27 | @Override
28 | public void onCreate(@Nullable Bundle savedInstanceState) {
29 | super.onCreate(savedInstanceState);
30 | activity = ((AppCompatActivity) getActivity());
31 | }
32 |
33 | @Nullable
34 | @Override
35 | public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
36 | if (null == rootView) {
37 | rootView = initRootView(inflater, container, savedInstanceState);
38 | }
39 | if (null != rootView) {
40 | ViewGroup viewGroup = (ViewGroup) rootView.getParent();
41 | if (null != viewGroup) {
42 | viewGroup.removeAllViews();
43 | }
44 | unbinder = ButterKnife.bind(rootView, activity);
45 | }
46 | return rootView;
47 | }
48 |
49 |
50 | protected abstract View initRootView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState);
51 |
52 | @Override
53 | public void onDestroyView() {
54 | super.onDestroyView();
55 | if (null != unbinder)
56 | unbinder.unbind();
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dch/test/base/BaseLoadLayoutFragment.java:
--------------------------------------------------------------------------------
1 | package com.dch.test.base;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 | import android.support.v7.app.AppCompatActivity;
6 | import android.view.LayoutInflater;
7 | import android.view.View;
8 | import android.view.ViewGroup;
9 | import android.widget.LinearLayout;
10 | import android.widget.ProgressBar;
11 |
12 | import com.dch.test.R;
13 | import com.dch.test.contract.HomeContract;
14 |
15 | import butterknife.BindView;
16 | import butterknife.ButterKnife;
17 | import butterknife.Unbinder;
18 |
19 | /**
20 | * 作者:Dch on 2017/4/11 12:04
21 | * 描述:
22 | * 邮箱:daichuanhao@caijinquan.com
23 | */
24 | public abstract class BaseLoadLayoutFragment extends BaseFragment implements HomeContract.View{
25 |
26 | protected AppCompatActivity activity;
27 | protected View rootView;
28 | protected Unbinder unbinder;
29 | protected boolean isPrepared = false;
30 |
31 | @BindView(R.id.progressbar_base)
32 | protected ProgressBar progressbar_base;
33 | @BindView(R.id.ll_content_base)
34 | protected LinearLayout ll_content_base;
35 |
36 | @Override
37 | public void onCreate(@Nullable Bundle savedInstanceState) {
38 | super.onCreate(savedInstanceState);
39 | activity = ((AppCompatActivity) getActivity());
40 | }
41 |
42 | @Nullable
43 | @Override
44 | public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
45 | if (null == rootView) {
46 | rootView = inflater.inflate(R.layout.fragment_base_loadlayout,null);
47 | }
48 | if (null != rootView) {
49 | ViewGroup viewGroup = (ViewGroup) rootView.getParent();
50 | if (null != viewGroup) {
51 | viewGroup.removeAllViews();
52 | }
53 | unbinder = ButterKnife.bind(rootView, activity);
54 | }
55 |
56 | ll_content_base.addView(addContentView(inflater));
57 | isPrepared = true;
58 | return rootView;
59 | }
60 |
61 | @Override
62 | protected View initRootView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
63 | return null;
64 | }
65 |
66 | protected abstract View addContentView(LayoutInflater inflater);
67 |
68 | @Override
69 | public void onDestroyView() {
70 | super.onDestroyView();
71 | isPrepared = false;
72 | if (null != unbinder)
73 | unbinder.unbind();
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dch/test/base/BasePresenter.java:
--------------------------------------------------------------------------------
1 | package com.dch.test.base;
2 |
3 | import android.support.v7.app.AppCompatActivity;
4 |
5 | import javax.inject.Inject;
6 |
7 | import dagger.Provides;
8 |
9 | /**
10 | * 作者:Dch on 2017/4/10 15:53
11 | * 描述:
12 | * 邮箱:daichuanhao@caijinquan.com
13 | */
14 | public interface BasePresenter {
15 |
16 | void start();
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dch/test/base/BaseView.java:
--------------------------------------------------------------------------------
1 | package com.dch.test.base;
2 |
3 | /**
4 | * 作者:Dch on 2017/4/10 15:53
5 | * 描述:
6 | * 邮箱:daichuanhao@caijinquan.com
7 | */
8 | public interface BaseView {
9 | void setHomePresenter(T homePresenter);
10 | void showLoading();
11 | void hideLoading();
12 | void showError(String error);
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/com/dch/test/base/adapter/ListBaseAdapter.java:
--------------------------------------------------------------------------------
1 | package com.dch.test.base.adapter;
2 |
3 | import android.content.Context;
4 | import android.support.v7.widget.RecyclerView;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 |
9 | import java.util.ArrayList;
10 | import java.util.Collection;
11 | import java.util.List;
12 |
13 | /**
14 | * Created by dch on 2017/4/16.
15 | */
16 |
17 | public abstract class ListBaseAdapter extends RecyclerView.Adapter {
18 |
19 | protected Context mContext;
20 | private LayoutInflater mInflater;
21 | public List mDataList = new ArrayList<>();
22 |
23 | public ListBaseAdapter(Context context){
24 | mContext = context;
25 | mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
26 | }
27 |
28 | protected abstract int getLayoutId();
29 |
30 | @Override
31 | public SuperViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
32 | View view = mInflater.inflate(getLayoutId(), parent, false);
33 | return new SuperViewHolder(view);
34 | }
35 |
36 | @Override
37 | public void onBindViewHolder(SuperViewHolder holder, int position) {
38 | onBindItemHolder(holder,position);
39 | }
40 |
41 | @Override
42 | public void onBindViewHolder(SuperViewHolder holder, int position, List