├── .gitignore
├── .idea
├── encodings.xml
├── gradle.xml
├── misc.xml
└── runConfigurations.xml
├── README.md
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
├── proguardMapping.txt
├── qzs_android.jks
├── release
│ ├── app-release.apk
│ └── output.json
├── signing.properties
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── qzs
│ │ └── wanandroid
│ │ └── ExampleInstrumentedTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ │ └── qzs
│ │ │ └── wanandroid
│ │ │ ├── base
│ │ │ ├── BaseMvpActivity.java
│ │ │ ├── BaseMvpFragment.java
│ │ │ ├── BaseMvpPresenter.java
│ │ │ ├── IActivity.java
│ │ │ ├── IBaseMvpView.java
│ │ │ ├── IFragment.java
│ │ │ ├── OnLoadDatasListener.java
│ │ │ ├── SimpleRecyclerAdapter.java
│ │ │ └── SimpleViewHolder.java
│ │ │ ├── bean
│ │ │ └── CurrencyBean.java
│ │ │ ├── common
│ │ │ ├── ItemType.java
│ │ │ ├── MainActivity.java
│ │ │ └── MyApplication.java
│ │ │ ├── http
│ │ │ ├── AddCookiesInterceptor.java
│ │ │ ├── ApiException.java
│ │ │ ├── ApiService.java
│ │ │ ├── BaseObserver.java
│ │ │ ├── BaseResponse.java
│ │ │ ├── ReceivedCookiesInterceptor.java
│ │ │ └── RetrofitFactory.java
│ │ │ ├── imageloader
│ │ │ ├── GlideFile.java
│ │ │ └── GlideUtils.java
│ │ │ ├── mvp
│ │ │ ├── model
│ │ │ │ ├── IBannerModel.java
│ │ │ │ ├── ICollectModel.java
│ │ │ │ ├── IFrHomeModel.java
│ │ │ │ ├── IFrProjectModel.java
│ │ │ │ ├── ILoginModel.java
│ │ │ │ ├── IMyCollectModel.java
│ │ │ │ ├── INavigateModel.java
│ │ │ │ ├── IRegisterModel.java
│ │ │ │ ├── ISearchDetailModel.java
│ │ │ │ └── impl
│ │ │ │ │ ├── BannerModelImpl.java
│ │ │ │ │ ├── CollectModelImpl.java
│ │ │ │ │ ├── FrHomeModelImpl.java
│ │ │ │ │ ├── FrProjectModelImpl.java
│ │ │ │ │ ├── LoginModelImpl.java
│ │ │ │ │ ├── MyCollectModelImpl.java
│ │ │ │ │ ├── NavigateImpl.java
│ │ │ │ │ ├── RegisterModelImpl.java
│ │ │ │ │ └── SearchDetailModelImpl.java
│ │ │ ├── presenter
│ │ │ │ ├── ArticleDetailsPresenter.java
│ │ │ │ ├── CurrencyPresenter.java
│ │ │ │ ├── FrHomePresenter.java
│ │ │ │ ├── FrPCenterPresenter.java
│ │ │ │ ├── FrProjectPresenter.java
│ │ │ │ ├── FrProjectSecPresenter.java
│ │ │ │ ├── LoginPresenter.java
│ │ │ │ ├── MainPresenter.java
│ │ │ │ ├── MyCollectPresenter.java
│ │ │ │ ├── NavigatePresenter.java
│ │ │ │ ├── RegisterPresenter.java
│ │ │ │ └── SearchDetailPresenter.java
│ │ │ └── view
│ │ │ │ ├── CurrencyView.java
│ │ │ │ ├── IArticleDetailView.java
│ │ │ │ ├── IFrProjectSecView.java
│ │ │ │ ├── IFragmentHomeView.java
│ │ │ │ ├── IFragmentPCenterView.java
│ │ │ │ ├── IFragmentProjectView.java
│ │ │ │ ├── ILoginView.java
│ │ │ │ ├── IMainView.java
│ │ │ │ ├── IMyCollectView.java
│ │ │ │ ├── INavigateView.java
│ │ │ │ ├── IRegisterView.java
│ │ │ │ └── ISearchDetailView.java
│ │ │ ├── ui
│ │ │ └── information
│ │ │ │ ├── activity
│ │ │ │ ├── ArticleDetailsActivity.java
│ │ │ │ ├── LoginActivity.java
│ │ │ │ ├── MyCollectActivity.java
│ │ │ │ ├── QzsActivity.java
│ │ │ │ ├── RegisterActivity.java
│ │ │ │ └── SearchDetailActivity.java
│ │ │ │ ├── adapter
│ │ │ │ ├── HomeAdapter.java
│ │ │ │ ├── LeftAdapter.java
│ │ │ │ ├── MyCollectAdapter.java
│ │ │ │ ├── ProjectAdapter.java
│ │ │ │ └── RightAdapter.java
│ │ │ │ ├── bean
│ │ │ │ ├── BannerBean.java
│ │ │ │ ├── MainListBean.java
│ │ │ │ ├── MyCollectBean.java
│ │ │ │ ├── NavigateBean.java
│ │ │ │ ├── ProjectListBean.java
│ │ │ │ └── ProjectTitleBean.java
│ │ │ │ ├── fragment
│ │ │ │ ├── HomeFragment.java
│ │ │ │ ├── NavigateFragment.java
│ │ │ │ ├── PersonalCenterFragment.java
│ │ │ │ ├── ProjectFragment.java
│ │ │ │ └── ProjectSecFragment.java
│ │ │ │ └── viewholder
│ │ │ │ ├── LeftViewHolder.java
│ │ │ │ ├── RightBigSortViewHolder.java
│ │ │ │ └── RightSmallSortViewHolder.java
│ │ │ ├── utils
│ │ │ ├── CommonUtil.java
│ │ │ ├── DensityUtil.java
│ │ │ ├── DialogUtils.java
│ │ │ ├── HideUtil.java
│ │ │ ├── LogUtils.java
│ │ │ ├── MyUtils.java
│ │ │ ├── RecycleViewAnimationUtils.java
│ │ │ ├── SpUtils.java
│ │ │ └── Utils.java
│ │ │ └── widget
│ │ │ └── ProgressWebView.java
│ └── res
│ │ ├── anim
│ │ ├── item_animation_fall_down.xml
│ │ └── layout_animation_fall_down.xml
│ │ ├── drawable-v24
│ │ └── ic_launcher_foreground.xml
│ │ ├── drawable
│ │ ├── banner_pot1.xml
│ │ ├── banner_pot2.xml
│ │ ├── bg_card.xml
│ │ ├── drawable_addfriend_search_bg.xml
│ │ ├── drawable_complete_person_head_back2.xml
│ │ ├── drawable_home_label1.xml
│ │ ├── drawable_home_label2.xml
│ │ ├── drawable_load_error_btn.xml
│ │ ├── drawable_login_btn.xml
│ │ ├── drawable_my_collect_delete_bg.xml
│ │ ├── drawable_personal_center_bg1.xml
│ │ ├── foreground_cardview.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── ic_login_btn1.png
│ │ ├── ic_login_btn2.png
│ │ ├── shape_bg_white_search.xml
│ │ └── shape_toobar.xml
│ │ ├── layout
│ │ ├── activity_article_detail.xml
│ │ ├── activity_login.xml
│ │ ├── activity_main.xml
│ │ ├── activity_my_collect.xml
│ │ ├── activity_qzs.xml
│ │ ├── activity_register.xml
│ │ ├── activity_search_detail.xml
│ │ ├── fragment_home.xml
│ │ ├── fragment_navigate.xml
│ │ ├── fragment_personal_center.xml
│ │ ├── fragment_project.xml
│ │ ├── fragment_project_sec.xml
│ │ ├── item_banner_image.xml
│ │ ├── item_home_banner.xml
│ │ ├── item_home_info.xml
│ │ ├── item_home_list.xml
│ │ ├── item_my_collect.xml
│ │ ├── item_project_list.xml
│ │ ├── item_view_home_load.xml
│ │ ├── layout_load_error.xml
│ │ ├── layout_personal_center1.xml
│ │ ├── layout_personal_center2.xml
│ │ ├── loading_dialog.xml
│ │ ├── recyclerview_item_right_big_sort.xml
│ │ ├── recyclerview_item_right_small_sort.xml
│ │ └── recyclerview_item_search_sort_left.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
│ │ └── test.jpg
│ │ ├── mipmap-xhdpi
│ │ ├── assets_back.png
│ │ ├── ic1.png
│ │ ├── ic2.png
│ │ ├── ic3.png
│ │ ├── ic_addfriend_find.png
│ │ ├── ic_adoption_share.png
│ │ ├── ic_arrows_left_white.png
│ │ ├── ic_home_author.png
│ │ ├── ic_home_search_bg.png
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_round.png
│ │ ├── ic_load_error.png
│ │ ├── ic_location_delete.png
│ │ ├── ic_login_out.png
│ │ ├── ic_main_classification1.png
│ │ ├── ic_main_classification2.png
│ │ ├── ic_main_home1.png
│ │ ├── ic_main_home2.png
│ │ ├── ic_main_me1.png
│ │ ├── ic_main_me2.png
│ │ ├── ic_main_navigate1.png
│ │ ├── ic_main_navigate2.png
│ │ ├── ic_main_project1.png
│ │ ├── ic_main_project2.png
│ │ ├── ic_me.jpg
│ │ ├── ic_my_collect.png
│ │ ├── ic_my_help.png
│ │ ├── ic_my_meat.png
│ │ ├── ic_personal_center_bg.png
│ │ ├── ic_project_bg.png
│ │ ├── ic_project_bg1.png
│ │ ├── ic_search.png
│ │ ├── ic_settings.png
│ │ ├── ic_star_normal.png
│ │ ├── ic_star_select.png
│ │ └── loading_bg.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ └── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── integers.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test
│ └── java
│ └── com
│ └── qzs
│ └── wanandroid
│ └── ExampleUnitTest.java
├── build.gradle
├── gif
├── ic11.jpg
├── ic2.jpg
├── ic3.jpg
├── ic4.jpg
├── ic5.jpg
├── ic6.gif
└── ic_me.jpg
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── wandroid_sdk
├── .gitignore
├── build.gradle
├── libs
└── tbs_sdk_thirdapp_v4.3.0.1020_43633_sharewithdownload_withoutGame_obfs_20190111_105200.jar
├── proguard-rules.pro
└── src
├── androidTest
└── java
│ └── com
│ └── qzs
│ └── wandroid_sdk
│ └── ExampleInstrumentedTest.java
├── main
├── AndroidManifest.xml
└── res
│ └── values
│ └── strings.xml
└── test
└── java
└── com
└── qzs
└── wandroid_sdk
└── ExampleUnitTest.java
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/caches
5 | /.idea/libraries
6 | /.idea/modules.xml
7 | /.idea/workspace.xml
8 | /.idea/navEditor.xml
9 | /.idea/assetWizardSettings.xml
10 | .DS_Store
11 | /build
12 | /captures
13 | .externalNativeBuild
14 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
14 |
15 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # QzsWanAndroid
2 | 基于 wanandroid.com 开发的 MVP + Retrofit2 + RxJava2 +okhttp3 开发的 Android APP
3 |
4 | 
5 |
6 | /n
7 | ### 目前已完成的功能(持续更新)
8 |
9 | - 登录注册登出
10 | - 首页文章列表
11 | - 首页搜索文章
12 | - 项目分类
13 | - 项目列表
14 | - 收藏文章
15 | - 取消收藏
16 | - 收藏列表
17 |
18 | ### dependenices
19 |
20 | - [retrofit](https://github.com/square/retrofit)
21 | - [okhttp](https://github.com/square/okhttp)
22 | - [rxjava](https://github.com/ReactiveX/RxJava)
23 | - [Glide](https://github.com/bumptech/glide)
24 | - [Banner](https://github.com/youth5201314/banner)
25 | - [SmartRefreshLayout](https://github.com/scwang90/SmartRefreshLayout)
26 | - [BaseRecyclerViewAdapterHelper](https://github.com/CymChad/BaseRecyclerViewAdapterHelper)
27 | - [flowlayout](https://github.com/hongyangAndroid/FlowLayout)
28 | - [SwipeDelMenuLayout](https://github.com/mcxtzhang/SwipeDelMenuLayout)
29 |
30 | ### APK下载安装
31 |
32 | - [点击下载安装](https://www.pgyer.com/pxdM)
33 |
34 | ### 我的联系方式
35 |
36 | - 我的微信公众号
37 | 
38 |
39 |
40 | - 我的微信号: lengquele5311
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 28
5 | defaultConfig {
6 | applicationId "com.qzs.wanandroid"
7 |
8 | minSdkVersion rootProject.ext.minSdkVersion
9 | targetSdkVersion rootProject.ext.targetSdkVersion
10 | versionCode rootProject.ext.versionCode
11 | versionName rootProject.ext.versionName
12 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
13 | }
14 |
15 | signingConfigs {
16 |
17 | // release {
18 | // keyAlias 'qzs_android'
19 | // keyPassword '123456'
20 | //
21 | // storeFile file('./qzs_android.keystore')
22 | // storePassword '123456'
23 | // }
24 | // debug {
25 | // keyAlias 'androiddebugkey'
26 | // keyPassword 'android'
27 | //
28 | // storeFile file('./debug.keystore')
29 | // storePassword 'android'
30 | //
31 | // }
32 | }
33 | buildTypes {
34 | release {
35 | // 混淆
36 | minifyEnabled true
37 | // Zipalign优化
38 | zipAlignEnabled true
39 | // 移除无用的resource文件
40 | shrinkResources true
41 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
42 | }
43 | }
44 | }
45 |
46 | dependencies {
47 | implementation fileTree(dir: 'libs', include: ['*.jar'])
48 | implementation 'com.android.support:appcompat-v7:28.0.0'
49 | implementation 'com.android.support:support-v4:28.0.0'
50 | implementation 'com.android.support.constraint:constraint-layout:1.1.3'
51 | testImplementation 'junit:junit:4.12'
52 | androidTestImplementation 'com.android.support.test:runner:1.0.2'
53 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
54 |
55 | implementation project(':wandroid_sdk')
56 | debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
57 | releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
58 |
59 |
60 | }
61 |
--------------------------------------------------------------------------------
/app/qzs_android.jks:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaexception/QzsWanAndroid/d3805a0f3316b364aba6239cde8c74af77e0bb82/app/qzs_android.jks
--------------------------------------------------------------------------------
/app/release/app-release.apk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/javaexception/QzsWanAndroid/d3805a0f3316b364aba6239cde8c74af77e0bb82/app/release/app-release.apk
--------------------------------------------------------------------------------
/app/release/output.json:
--------------------------------------------------------------------------------
1 | [{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
--------------------------------------------------------------------------------
/app/signing.properties:
--------------------------------------------------------------------------------
1 | STORE_FILE=qzs_android.jks
2 | STORE_PASSWORD=123456
3 | KEY_ALIAS=qzs_android
4 | KEY_PASSWORD=123456
--------------------------------------------------------------------------------
/app/src/androidTest/java/com/qzs/wanandroid/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.qzs.wanandroid;
2 |
3 | import android.content.Context;
4 | import android.support.test.InstrumentationRegistry;
5 | import android.support.test.runner.AndroidJUnit4;
6 |
7 | import org.junit.Test;
8 | import org.junit.runner.RunWith;
9 |
10 | import static org.junit.Assert.*;
11 |
12 | /**
13 | * Instrumented test, which will execute on an Android device.
14 | *
15 | * @see Testing documentation
16 | */
17 | @RunWith(AndroidJUnit4.class)
18 | public class ExampleInstrumentedTest {
19 | @Test
20 | public void useAppContext() {
21 | // Context of the app under test.
22 | Context appContext = InstrumentationRegistry.getTargetContext();
23 |
24 | assertEquals("com.qzs.wanandroid", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
22 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
36 |
37 |
40 |
41 |
42 |
45 |
46 |
48 |
49 |
50 |
53 |
54 |
55 |
58 |
59 |
60 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/app/src/main/java/com/qzs/wanandroid/base/BaseMvpActivity.java:
--------------------------------------------------------------------------------
1 | package com.qzs.wanandroid.base;
2 |
3 | import android.app.Dialog;
4 | import android.os.Bundle;
5 | import android.support.annotation.Nullable;
6 | import android.view.View;
7 |
8 | import com.gyf.immersionbar.ImmersionBar;
9 | import com.qzs.wanandroid.common.MyApplication;
10 | import com.qzs.wanandroid.utils.DialogUtils;
11 | import com.squareup.leakcanary.RefWatcher;
12 | import com.trello.rxlifecycle2.components.support.RxAppCompatActivity;
13 |
14 |
15 | public abstract class BaseMvpActivity> extends RxAppCompatActivity implements IBaseMvpView, IActivity , View.OnClickListener{
16 |
17 | protected P mPresenter;
18 |
19 | protected Dialog dialog;
20 |
21 | @SuppressWarnings("unchecked")
22 | @Override
23 | protected void onCreate(@Nullable Bundle savedInstanceState) {
24 | super.onCreate(savedInstanceState);
25 | setContentView(getLayout());
26 | ImmersionBar.with(this).init();
27 | if (mPresenter == null) {
28 | mPresenter = createPresenter();
29 | }
30 | mPresenter.attachMvpView((V) this);
31 | initImmersionBar();
32 | dialog = DialogUtils.createLoadingDialog(this, "请稍后...");
33 | initView();
34 | initData( savedInstanceState);
35 | }
36 |
37 | protected abstract P createPresenter();
38 |
39 | @Override
40 | protected void onDestroy() {
41 | super.onDestroy();
42 | //内存泄漏
43 | RefWatcher refWatcher = MyApplication.getRefWatcher(this);//1
44 | refWatcher.watch(this);
45 | if (mPresenter != null) {
46 | mPresenter.detachMvpView();
47 | }
48 | }
49 |
50 | @Override
51 | protected void onResume() {
52 | super.onResume();
53 | }
54 |
55 | @Override
56 | protected void onPause() {
57 | super.onPause();
58 | }
59 |
60 | /**
61 | * 初始化沉浸式
62 | * Init immersion bar.
63 | */
64 | protected void initImmersionBar() {
65 | //设置共同沉浸式样式
66 | ImmersionBar.with(this).init();
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/app/src/main/java/com/qzs/wanandroid/base/BaseMvpFragment.java:
--------------------------------------------------------------------------------
1 | package com.qzs.wanandroid.base;
2 |
3 | import android.app.Dialog;
4 | import android.os.Bundle;
5 | import android.support.annotation.NonNull;
6 | import android.support.annotation.Nullable;
7 | import android.view.LayoutInflater;
8 | import android.view.View;
9 | import android.view.ViewGroup;
10 |
11 | import com.gyf.immersionbar.ImmersionBar;
12 | import com.qzs.wanandroid.R;
13 | import com.qzs.wanandroid.common.MyApplication;
14 | import com.qzs.wanandroid.utils.DialogUtils;
15 | import com.qzs.wanandroid.utils.HideUtil;
16 | import com.squareup.leakcanary.RefWatcher;
17 | import com.trello.rxlifecycle2.components.support.RxFragment;
18 |
19 | public abstract class BaseMvpFragment> extends RxFragment implements IBaseMvpView, IFragment, View.OnClickListener{
20 |
21 | protected P mPresenter;
22 |
23 | protected View rootView;// 缓存Fragment view
24 | protected Dialog dialog;
25 |
26 | @Nullable
27 | @Override
28 | public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
29 | if (rootView == null) {
30 | rootView = inflater.inflate(getLayout(), null);
31 | }
32 | // 缓存的rootView需要判断是否已经被加过parent,如果有parent需要从parent删除,要不然会发生这个rootview已经有parent的错误。
33 | ViewGroup parent = (ViewGroup) rootView.getParent();
34 | if (parent != null) {
35 | parent.removeView(rootView);
36 | }
37 |
38 | // unbinder = ButterKnife.bind(this, rootView);
39 | if (rootView instanceof ViewGroup) {
40 | HideUtil.init(getActivity(), (ViewGroup) rootView);//初始化触摸关闭软键盘
41 | }
42 |
43 | if (mPresenter == null) {
44 | mPresenter = createPresenter();
45 | }
46 | mPresenter.attachMvpView((V) this);
47 |
48 | dialog = DialogUtils.createLoadingDialog(getActivity(), "请稍后...");
49 |
50 | initImmersionBar();
51 | initView();
52 | initData(savedInstanceState);
53 | return rootView;
54 | }
55 |
56 |
57 | protected abstract P createPresenter();
58 |
59 | @Override
60 | public void onDestroyView() {
61 | super.onDestroyView();
62 | RefWatcher refWatcher = MyApplication.getRefWatcher(getActivity());//1
63 | refWatcher.watch(this);
64 | if (mPresenter != null) {
65 | mPresenter.detachMvpView();
66 | }
67 | }
68 |
69 | /**
70 | * 初始化沉浸式
71 | * Init immersion bar.
72 | */
73 | protected void initImmersionBar() {
74 | //设置共同沉浸式样式
75 | ImmersionBar.with(this).init();
76 | }
77 |
78 | }
79 |
--------------------------------------------------------------------------------
/app/src/main/java/com/qzs/wanandroid/base/BaseMvpPresenter.java:
--------------------------------------------------------------------------------
1 | package com.qzs.wanandroid.base;
2 |
3 | import java.lang.ref.WeakReference;
4 |
5 |
6 | public class BaseMvpPresenter {
7 |
8 | /**
9 | * v层泛型引用
10 | */
11 | protected V mView;
12 |
13 | private WeakReference weakReferenceView;
14 | //防止空指针
15 | protected V getView(){
16 | if(mView == null) {
17 | throw new IllegalStateException("view not attached");
18 | }
19 | else{
20 | return mView;
21 | }
22 | }
23 |
24 | public void attachMvpView(V view) {
25 | if (view!=null){
26 | weakReferenceView = new WeakReference<>(view);
27 | this.mView = weakReferenceView.get();
28 | }
29 |
30 | }
31 |
32 |
33 | public void detachMvpView() {
34 | weakReferenceView.clear();
35 | weakReferenceView = null;
36 | mView = null;
37 | }
38 |
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/app/src/main/java/com/qzs/wanandroid/base/IActivity.java:
--------------------------------------------------------------------------------
1 | package com.qzs.wanandroid.base;
2 |
3 | import android.os.Bundle;
4 |
5 | /**
6 | * @author qinzishuai
7 | * 描述:
8 | * 创建日期:2019/7/12
9 | *
10 | */
11 | public interface IActivity {
12 |
13 | int getLayout();
14 |
15 | void initView();
16 |
17 | void initData(Bundle savedInstanceState);
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/com/qzs/wanandroid/base/IBaseMvpView.java:
--------------------------------------------------------------------------------
1 | package com.qzs.wanandroid.base;
2 |
3 |
4 | import android.app.Dialog;
5 |
6 | public interface IBaseMvpView {
7 | /**
8 | * 获取view层的dialog
9 | *
10 | * @return retuen
11 | */
12 | Dialog getLoadDialog();
13 |
14 | /***
15 | * 关闭view层的dialog
16 | */
17 | void cancelLoadDialog();
18 |
19 |
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/com/qzs/wanandroid/base/IFragment.java:
--------------------------------------------------------------------------------
1 | package com.qzs.wanandroid.base;
2 |
3 | import android.os.Bundle;
4 |
5 |
6 | public interface IFragment {
7 |
8 | int getLayout();
9 |
10 | void initView();
11 |
12 | void initData(Bundle savedInstanceState);
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/com/qzs/wanandroid/base/OnLoadDatasListener.java:
--------------------------------------------------------------------------------
1 | package com.qzs.wanandroid.base;
2 |
3 | /**
4 | * @author qinzishuai
5 | * 描述:
6 | * 创建日期:2019/7/12
7 | *
8 | */
9 | public interface OnLoadDatasListener {
10 |
11 | /**
12 | * 成功
13 | * @param t 数据
14 | */
15 | void onSuccess(T t);
16 |
17 |
18 | /**
19 | * 失败
20 | * @param error 错误信息
21 | */
22 | void onFailure(String error);
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/java/com/qzs/wanandroid/base/SimpleRecyclerAdapter.java:
--------------------------------------------------------------------------------
1 | package com.qzs.wanandroid.base;
2 |
3 |
4 | import android.support.v7.widget.RecyclerView;
5 |
6 | import java.util.List;
7 |
8 | /**
9 | * @author pengbo
10 | * @date 2018/5/22
11 | */
12 | public abstract class SimpleRecyclerAdapter extends RecyclerView.Adapter> {
13 |
14 | protected List mListData;
15 |
16 | private SimpleRecyclerAdapter.OnItemClickListener onItemClickListener;
17 | private SimpleRecyclerAdapter.OnItemLongClickListener mOnItemLongClickListener;
18 |
19 | public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
20 | this.onItemClickListener = onItemClickListener;
21 | }
22 | public void setOnItemLongClickListener(OnItemLongClickListener mOnItemLongClickListener) {
23 | this.mOnItemLongClickListener = mOnItemLongClickListener;
24 | }
25 | void onItemClick(T data, int index) {
26 | if (onItemClickListener != null) {
27 | onItemClickListener.onItemClick(data, index);
28 | }
29 |
30 | }
31 | void onItemLongClick(T data,int index){
32 | if(mOnItemLongClickListener!=null){
33 | mOnItemLongClickListener.onItemLongClick(data,index);
34 | }
35 | }
36 |
37 | /**
38 | * 设置列表数据
39 | * @param data
40 | */
41 | public void setListData(List data) {
42 | this.mListData = data;
43 | }
44 |
45 | @Override
46 | public void onBindViewHolder(SimpleViewHolder holder, int position) {
47 | holder.refresh(mListData.get(position), position);
48 | }
49 |
50 | @Override
51 | public void onBindViewHolder(SimpleViewHolder holder, int position, List