├── .gitignore ├── .idea ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── encodings.xml ├── gradle.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── yzs │ │ └── yzsbaseactivity │ │ ├── activity │ │ ├── DemoActivity.java │ │ └── SecondActivity.java │ │ ├── base │ │ ├── BaseFragment.java │ │ ├── BaseListFragment.java │ │ └── BaseMvpListFragment.java │ │ ├── bean │ │ └── DemoListBean.java │ │ ├── contract │ │ └── TestMvpListContract.java │ │ ├── fragment │ │ ├── DemoFragment.java │ │ ├── HomeFragment.java │ │ ├── IndexFragment.java │ │ ├── ListMvpDemoFragment.java │ │ ├── MsgFragment.java │ │ ├── MyFragment.java │ │ └── WebFragment.java │ │ ├── layout │ │ └── CustomLoadMoreView.java │ │ ├── model │ │ └── TestModel.java │ │ └── presenter │ │ └── TestPresenter.java │ └── res │ ├── drawable-xhdpi │ ├── empty_address.png │ ├── tab_contact_select.png │ ├── tab_contact_unselect.png │ ├── tab_home_select.png │ ├── tab_home_unselect.png │ ├── tab_more_select.png │ ├── tab_more_unselect.png │ ├── tab_speech_select.png │ └── tab_speech_unselect.png │ ├── layout │ ├── activity_main.xml │ ├── fg_demo_change_list.xml │ ├── fg_home.xml │ ├── fg_index.xml │ └── item_list_demo.xml │ ├── mipmap-hdpi │ └── ic_launcher.png │ ├── mipmap-mdpi │ └── ic_launcher.png │ ├── mipmap-xhdpi │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ └── ic_launcher.png │ ├── mipmap-xxxhdpi │ └── ic_launcher.png │ ├── values-w820dp │ └── dimens.xml │ └── values │ ├── colors.xml │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── yzsbaseactivitylib ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src └── main ├── AndroidManifest.xml ├── java └── com │ └── yzs │ └── yzsbaseactivitylib │ ├── adapter │ ├── CommonAdapter.java │ ├── ItemViewDelegate.java │ ├── ItemViewDelegateManager.java │ ├── MultiItemTypeAdapter.java │ └── ViewHolder.java │ ├── anim │ └── Rotate3d.java │ ├── annotations │ └── ListType.java │ ├── basemvp │ ├── BaseModel.java │ ├── BasePresenter.java │ └── BaseView.java │ ├── dialog │ ├── IndeterminateProgressBar.java │ ├── ProgressDialog.java │ └── YzsLoadingDialog.java │ ├── entity │ ├── BaseEventBusBean.java │ ├── BaseListType.java │ └── TabEntity.java │ ├── line │ ├── DividerGridItemDecoration.java │ └── DividerItemDecoration.java │ ├── okload │ └── IOkLoad.java │ ├── util │ ├── ActivityGoUtils.java │ ├── AppManager.java │ ├── LoadingDialogUtils.java │ ├── PostEventBusUtils.java │ ├── SizeUtils.java │ ├── StringUtils.java │ ├── TUtil.java │ └── Utils.java │ ├── view │ ├── ColorFilterImageView.java │ └── RecyclerViewLoaderMoreView.java │ └── yzsbase │ ├── YzsBaseActivity.java │ ├── YzsBaseFragment.java │ ├── YzsBaseHomeFragment.java │ ├── YzsBaseListFragment.java │ ├── YzsBaseListTypeFragment.java │ ├── YzsBaseMvpListFragment.java │ ├── YzsBaseMvpListTypeFragment.java │ ├── YzsBaseSupportFragmentActivity.java │ └── YzsBaseWebFragment.java └── res ├── drawable-xxhdpi └── base_toolbar_back.png ├── layout ├── ac_base.xml ├── ac_base_toolbar_cover.xml ├── layout_common_toolbar.xml ├── layout_empty_view.xml ├── layout_web.xml ├── res_l_simple_progress_dialog.xml ├── res_yzs_loading_dialog.xml └── yzs_comment_list.xml ├── mipmap-mdpi └── icon.png ├── mipmap-xhdpi └── icon.png ├── mipmap-xxhdpi └── icon.png ├── mipmap-xxxhdpi └── icon.png ├── values-v19 └── dimens.xml └── values ├── colors.xml ├── dimens.xml ├── ids.xml ├── strings.xml └── styles.xml /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /.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 | 19 | 20 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 46 | 47 | 48 | 49 | 50 | 1.7 51 | 52 | 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # YzsBaseActivity 2 | [![](https://jitpack.io/v/yaozs/YzsBaseActivity.svg)](https://jitpack.io/#yaozs/YzsBaseActivity) 3 | [![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-YzsBaseActivity-green.svg?style=true)](https://android-arsenal.com/details/1/2756) 4 | ![](https://img.shields.io/badge/minSdk-15-blue.svg) 5 | [![](https://img.shields.io/github/stars/yaozs/YzsBaseActivity.svg)](https://github.com/yaozs/YzsBaseActivity/stargazers) 6 | [![](https://img.shields.io/github/forks/yaozs/YzsBaseActivity.svg)](https://github.com/yaozs/YzsBaseActivity/network) 7 | 8 | ![image](https://github.com/yaozs/YzsLib/blob/master/app/src/main/res/mipmap-xxxhdpi/icon.png)
9 | 10 | 11 | ![Android百科全书二维码.jpg](http://upload-images.jianshu.io/upload_images/5637205-5afd370499eee2d3.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 12 | 13 | ## 本人最新公众号《Android百科全书》,汇集了各个公众号的优秀文章,进行分类整理,让大家能够更方便的查阅,希望大家多多支持,来个关注奥。 14 | 15 | 如果你想详细的查看一下该框架的所有方法
16 | ### [YzsBaseActivity框架方法详解](https://www.jianshu.com/p/5df398294cbf)
17 | 18 | 本项目为yzslib的一个分支,目的是为了方便大家使用,减少依赖,如果需要整个开发框架请移步
19 | [YzsLib——超好用的开发框架](https://github.com/yaozs/YzsLib)
20 | 21 | YzsLib开源交流群:331973212 22 | 23 | 远程依赖方法在项目根目录下的build.gradle添加如下 24 | 25 | allprojects { 26 | repositories { 27 | ... 28 | 29 | maven { url "https://jitpack.io" } 30 | } 31 | } 32 | 33 | 在引用项目处添加 34 | dependencies { 35 | compile 'com.github.yaozs:YzsBaseActivity:0.4.3' 36 | } 37 | 38 | 目前最新版本为0.4.3,就是最新的release版本,之后引用修改版本号就可以 39 | 40 | 41 | ### 本项目采用的架构是 多Activity 多fragment的模块化架构,使用fragmentation作为底层进行的二次开发封装,使界面加载更加的快速, 42 | 切换动画比ac更加容易控制等优点。具体使用详见demo 43 | 44 |   45 | 46 | * 16.11.7 更新BaseActivity,支持4.4版本以上沉浸式 47 | * 16.11.15 更新style——activity,配合YzsBase使用实现沉浸式 48 | * 16.11.20 更新工具类,更新fragment替代库,封装eventbus到activity与fragment中 49 | * 16.11.21 增加YzsBaseWebActivity,更新整合Demo展示 50 | * 16.12.7 base重新分包,添加listView、gridview等的adapter,与BaseRecyclerViewAdapterHelper呼应共同维护list数据 51 | * 16.12.15 新增baseListActivity(列表数据视图base父类),baseListFragment,新增导航条控件,更新demo整体效果,更像一个app 52 | * 16.12.21 新增YzsLoadingDialog,可自定义图片的loading动画 53 | * 16.12.22 新增YzsBaseHomeActivity(首页base父类) 54 | * 17.03.06 优化base方法名,新增demo方便查看 55 | * 17.03.09 修复YzsBaseHomeActivity使用framelayout初始化选中,设置首页缓存数量(依然支持懒加载) 56 | * 17.03.13 增加basefragment默认初始化tooblar 57 | * 17.04.15 更改部分list界面方法,修改baseFragment为默认注册eventbus 58 | * 17.04.22 增加activity栈管理器,采用弱引用方式,使管理器更加安全,删除base中loading方法和toast方法,可以直接使用utils进行操作,更加便捷, 59 | 将跳转页面方法拆分,变为ActivityGoUtils 60 | * 17.07.04 重大更新。。。修改activity栈管理器,重构项目,兼容mvp模式与mvc模式,继续提供list界面和home界面的支持, 61 | list界面托管模式开启,全新架构,最少使用activity,采用ImmersionBar解决沉浸式方案,eventbus一键开启关闭 62 | * 17.07.05 修复加载更多bug,添加showBackButton(显示返回方法) 63 | * 17.07.13 优化fragment切换出现白边 64 | * 17.08.02 优化默认tooblar颜色设置,自动适配项目颜色 65 | * 17.08.07 优化list界面自动化处理,一句代码搞定各种加载状态 autoListLoad 方法诞生 66 | * 18.04.19 添加YzsBaseActivity框架方法详解,整理代码,梳理逻辑 67 | * 18.04.26 修复list页面设置第一页为0刷新后下一页为2的bug 68 | 69 | 70 | ### 本项目使用开源项目 71 | 1.[FlycoTabLayout——viewpager指示器 与 导航栏控件](https://github.com/H07000223/FlycoTabLayout)
72 | 2.[fragmentation——为"单Activity + 多Fragment","多模块Activity + 多Fragment"架构而生,替代官方fragment](https://github.com/YoKeyword/Fragmentation)
73 | 3.[eventbus——事件总线](https://github.com/greenrobot/EventBus)
74 | 4.[BaseRecyclerViewAdapterHelper——RecyclerView的强大的BaseAdapter](https://github.com/CymChad/BaseRecyclerViewAdapterHelper)
75 | 5.[android 4.4以上沉浸式状态栏和沉浸式导航栏管理,一句代码轻松实现](https://github.com/gyf-dev/ImmersionBar)
76 | 77 | ### 本项目参考的开源项目 78 | 1.[AndroidFire](https://github.com/jaydenxiao2016/AndroidFire)
79 | 80 | 81 | 本项目中使用其他的开源项目和参考修改,都会在近期更新出来,保护程序猿,就是保护我们自己O(∩_∩)O哈哈~ 82 |       83 |        喜欢的话给个star,留下点印记吧. 84 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 29 5 | buildToolsVersion "29.0.3" 6 | defaultConfig { 7 | applicationId "com.yzs.yzsbaseactivity" 8 | minSdkVersion 15 9 | targetSdkVersion 29 10 | versionCode 1 11 | versionName "1.0" 12 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | implementation fileTree(include: ['*.jar'], dir: 'libs') 24 | implementation 'androidx.appcompat:appcompat:1.1.0' 25 | implementation project(':yzsbaseactivitylib') 26 | implementation 'com.github.bumptech.glide:glide:4.11.0' 27 | annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' 28 | 29 | } 30 | -------------------------------------------------------------------------------- /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:\androidsdk/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 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/yzs/yzsbaseactivity/activity/DemoActivity.java: -------------------------------------------------------------------------------- 1 | package com.yzs.yzsbaseactivity.activity; 2 | 3 | import android.os.Bundle; 4 | 5 | import com.gyf.barlibrary.ImmersionBar; 6 | import com.yzs.yzsbaseactivity.R; 7 | import com.yzs.yzsbaseactivity.fragment.IndexFragment; 8 | import com.yzs.yzsbaseactivitylib.yzsbase.YzsBaseSupportFragmentActivity; 9 | 10 | import me.yokeyword.fragmentation.SupportFragment; 11 | 12 | /** 13 | * Author: 姚智胜 14 | * Version: V1.0版本 15 | * Description: 16 | * Date: 2017/3/15 17 | */ 18 | public class DemoActivity extends YzsBaseSupportFragmentActivity { 19 | @Override 20 | public SupportFragment setFragment() { 21 | return IndexFragment.newInstance(); 22 | } 23 | 24 | @Override 25 | public void initImmersion() { 26 | ImmersionBar.with(this).init(); 27 | } 28 | 29 | @Override 30 | public void initView() { 31 | 32 | } 33 | 34 | @Override 35 | protected void onDestroy() { 36 | super.onDestroy(); 37 | ImmersionBar.with(this).destroy(); 38 | } 39 | 40 | 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/yzs/yzsbaseactivity/activity/SecondActivity.java: -------------------------------------------------------------------------------- 1 | package com.yzs.yzsbaseactivity.activity; 2 | 3 | import android.os.Bundle; 4 | 5 | import com.gyf.barlibrary.ImmersionBar; 6 | import com.yzs.yzsbaseactivity.R; 7 | import com.yzs.yzsbaseactivity.fragment.ListMvpDemoFragment; 8 | import com.yzs.yzsbaseactivitylib.yzsbase.YzsBaseSupportFragmentActivity; 9 | 10 | import me.yokeyword.fragmentation.SupportFragment; 11 | 12 | /** 13 | * Author: 姚智胜 14 | * Version: V1.0版本 15 | * Description: 16 | * Date: 2017/7/4 17 | * Email: 541567595@qq.com 18 | */ 19 | 20 | public class SecondActivity extends YzsBaseSupportFragmentActivity { 21 | @Override 22 | public SupportFragment setFragment() { 23 | ImmersionBar.with(this).init(); 24 | return ListMvpDemoFragment.newInstance(); 25 | } 26 | 27 | @Override 28 | public void initImmersion() { 29 | 30 | } 31 | 32 | @Override 33 | public boolean showToolBar() { 34 | return false; 35 | } 36 | 37 | 38 | @Override 39 | public int getToolBarResId() { 40 | return R.layout.layout_common_toolbar; 41 | } 42 | 43 | @Override 44 | protected void getBundleExtras(Bundle extras) { 45 | 46 | } 47 | 48 | @Override 49 | protected void onDestroy() { 50 | super.onDestroy(); 51 | ImmersionBar.with(this).destroy(); 52 | } 53 | 54 | @Override 55 | public void initPresenter() { 56 | 57 | } 58 | 59 | @Override 60 | public void initView() { 61 | 62 | } 63 | 64 | 65 | } -------------------------------------------------------------------------------- /app/src/main/java/com/yzs/yzsbaseactivity/base/BaseFragment.java: -------------------------------------------------------------------------------- 1 | package com.yzs.yzsbaseactivity.base; 2 | 3 | import com.gyf.barlibrary.ImmersionBar; 4 | import com.yzs.yzsbaseactivity.R; 5 | import com.yzs.yzsbaseactivitylib.basemvp.BaseModel; 6 | import com.yzs.yzsbaseactivitylib.basemvp.BasePresenter; 7 | import com.yzs.yzsbaseactivitylib.yzsbase.YzsBaseFragment; 8 | 9 | /** 10 | * Author: 姚智胜 11 | * Version: V1.0版本 12 | * Description: 基础类baseFragment 包含沉浸式 13 | * Date: 2017/7/4 14 | * Email: 541567595@qq.com 15 | */ 16 | 17 | public abstract class BaseFragment extends YzsBaseFragment { 18 | 19 | @Override 20 | protected void immersionInit( ImmersionBar mImmersionBar) { 21 | // mImmersionBar 22 | // .statusBarDarkFont(true, 0.2f) 23 | // .statusBarView(R.id.yzs_view, rootView) 24 | // .statusBarColor(R.color.md_blue_300) 25 | // .navigationBarColor(R.color.md_blue_300) 26 | // .init(); 27 | } 28 | 29 | @Override 30 | public boolean showToolBar() { 31 | return true; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/yzs/yzsbaseactivity/base/BaseListFragment.java: -------------------------------------------------------------------------------- 1 | package com.yzs.yzsbaseactivity.base; 2 | 3 | import com.gyf.barlibrary.ImmersionBar; 4 | import com.yzs.yzsbaseactivity.R; 5 | import com.yzs.yzsbaseactivitylib.yzsbase.YzsBaseListFragment; 6 | 7 | /** 8 | * Author: 姚智胜 9 | * Version: V1.0版本 10 | * Description: 不使用MVP架构的baselistfragment 11 | * Date: 2017/7/4 12 | * Email: 541567595@qq.com 13 | */ 14 | 15 | public abstract class BaseListFragment extends YzsBaseListFragment { 16 | @Override 17 | protected void immersionInit(ImmersionBar mImmersionBar) { 18 | // mImmersionBar 19 | // .statusBarDarkFont(true, 0.2f) 20 | // .statusBarView(R.id.yzs_view, rootView) 21 | // .statusBarColor(R.color.md_blue_300) 22 | // .navigationBarColor(R.color.md_blue_300) 23 | // .init(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/yzs/yzsbaseactivity/base/BaseMvpListFragment.java: -------------------------------------------------------------------------------- 1 | package com.yzs.yzsbaseactivity.base; 2 | 3 | import com.gyf.barlibrary.ImmersionBar; 4 | import com.yzs.yzsbaseactivity.R; 5 | import com.yzs.yzsbaseactivitylib.basemvp.BaseModel; 6 | import com.yzs.yzsbaseactivitylib.basemvp.BasePresenter; 7 | import com.yzs.yzsbaseactivitylib.yzsbase.YzsBaseMvpListFragment; 8 | 9 | /** 10 | * Author: 姚智胜 11 | * Version: V1.0版本 12 | * Description: 不使用MVP架构的baselistfragment 13 | * Date: 2017/7/4 14 | * Email: 541567595@qq.com 15 | */ 16 | 17 | public abstract class BaseMvpListFragment 18 | extends YzsBaseMvpListFragment { 19 | @Override 20 | protected void immersionInit(ImmersionBar mImmersionBar) { 21 | // mImmersionBar 22 | // .statusBarDarkFont(true, 0.2f) 23 | // .statusBarView(R.id.yzs_view, rootView) 24 | // .statusBarColor(R.color.md_blue_300) 25 | // .navigationBarColor(R.color.md_blue_300) 26 | // .init(); 27 | 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/yzs/yzsbaseactivity/bean/DemoListBean.java: -------------------------------------------------------------------------------- 1 | package com.yzs.yzsbaseactivity.bean; 2 | 3 | /** 4 | * Author: 姚智胜 5 | * Version: V1.0版本 6 | * Description: list的demo数据类 7 | * Date: 2017/2/18 8 | */ 9 | public class DemoListBean { 10 | private static final String TAG = "DeamListBean"; 11 | private String title; 12 | 13 | public String getTitle() { 14 | return title; 15 | } 16 | 17 | public void setTitle(String title) { 18 | this.title = title; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/yzs/yzsbaseactivity/contract/TestMvpListContract.java: -------------------------------------------------------------------------------- 1 | package com.yzs.yzsbaseactivity.contract; 2 | 3 | 4 | import com.yzs.yzsbaseactivitylib.basemvp.BaseModel; 5 | import com.yzs.yzsbaseactivitylib.basemvp.BasePresenter; 6 | import com.yzs.yzsbaseactivitylib.basemvp.BaseView; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * Author: 姚智胜 12 | * Version: V1.0版本 13 | * Description: mvp接口(未使用rxjava,自己使用接口回调) 14 | * Date: 2017/7/3 15 | * Email: 541567595@qq.com 16 | */ 17 | 18 | public interface TestMvpListContract { 19 | 20 | interface View extends BaseView { 21 | void showData(List list); 22 | } 23 | 24 | interface Model extends BaseModel { 25 | /** 26 | * 未使用rxjava自己使用接口回掉 27 | */ 28 | interface OnFinishedListener { 29 | void onFinished(List items); 30 | } 31 | 32 | void getData(int page, OnFinishedListener listener); 33 | } 34 | 35 | abstract static class Presenter extends BasePresenter { 36 | public abstract void getDataRequest(int page); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/com/yzs/yzsbaseactivity/fragment/DemoFragment.java: -------------------------------------------------------------------------------- 1 | package com.yzs.yzsbaseactivity.fragment; 2 | 3 | import android.os.Bundle; 4 | import android.view.View; 5 | 6 | import com.yzs.yzsbaseactivity.base.BaseFragment; 7 | 8 | /** 9 | * Author: 姚智胜 10 | * Version: V1.0版本 11 | * Description: 使用详解 12 | * Date: 2017/7/4 13 | * Email: 541567595@qq.com 14 | */ 15 | 16 | public class DemoFragment extends BaseFragment{ 17 | @Override 18 | protected void initLogic() { 19 | 20 | } 21 | 22 | @Override 23 | protected int getLayoutRes() { 24 | return 0; 25 | } 26 | 27 | @Override 28 | protected void initView(View rootView) { 29 | 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/yzs/yzsbaseactivity/fragment/HomeFragment.java: -------------------------------------------------------------------------------- 1 | package com.yzs.yzsbaseactivity.fragment; 2 | 3 | import android.os.Bundle; 4 | import android.util.Log; 5 | import android.view.View; 6 | import android.widget.TextView; 7 | 8 | import com.chad.library.adapter.base.BaseQuickAdapter; 9 | import com.chad.library.adapter.base.BaseViewHolder; 10 | import com.gyf.barlibrary.ImmersionBar; 11 | import com.orhanobut.logger.Logger; 12 | import com.yzs.yzsbaseactivity.R; 13 | import com.yzs.yzsbaseactivity.activity.SecondActivity; 14 | import com.yzs.yzsbaseactivity.base.BaseFragment; 15 | import com.yzs.yzsbaseactivitylib.util.ActivityGoUtils; 16 | 17 | import java.util.ArrayList; 18 | 19 | 20 | /** 21 | * Author: 姚智胜 22 | * Version: V1.0版本 23 | * Description: 24 | * Date: 2016/12/15. 25 | */ 26 | public class HomeFragment extends BaseFragment { 27 | private static final String TAG = "HomeFragment"; 28 | 29 | private TextView textView; 30 | 31 | public static HomeFragment newInstance() { 32 | Bundle args = new Bundle(); 33 | HomeFragment fragment = new HomeFragment(); 34 | fragment.setArguments(args); 35 | return fragment; 36 | } 37 | 38 | BaseQuickAdapter adapter; 39 | 40 | @Override 41 | protected int getLayoutRes() { 42 | return R.layout.fg_home; 43 | } 44 | 45 | @Override 46 | protected void initView(View view) { 47 | textView = (TextView) view.findViewById(R.id.home); 48 | } 49 | 50 | @Override 51 | protected void initLogic() { 52 | textView.setOnClickListener(new View.OnClickListener() { 53 | @Override 54 | public void onClick(View v) { 55 | ActivityGoUtils.getInstance().readyGo(_mActivity, SecondActivity.class); 56 | } 57 | }); 58 | 59 | adapter = new BaseQuickAdapter(R.layout.layout_common_toolbar, new ArrayList()) { 60 | 61 | @Override 62 | protected void convert(BaseViewHolder helper, String item) { 63 | 64 | } 65 | }; 66 | } 67 | 68 | @Override 69 | protected void immersionInit(ImmersionBar mImmersionBar) { 70 | mImmersionBar 71 | .statusBarView(R.id.yzs_view, rootView) 72 | .statusBarColor(R.color.md_blue_300) 73 | .navigationBarColor(R.color.md_blue_300) 74 | .init(); 75 | } 76 | 77 | @Override 78 | public boolean showToolBar() { 79 | return true; 80 | } 81 | 82 | @Override 83 | protected boolean immersionEnabled() { 84 | return true; 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /app/src/main/java/com/yzs/yzsbaseactivity/fragment/IndexFragment.java: -------------------------------------------------------------------------------- 1 | package com.yzs.yzsbaseactivity.fragment; 2 | 3 | import android.os.Bundle; 4 | 5 | import com.gyf.barlibrary.ImmersionBar; 6 | import com.yzs.yzsbaseactivity.R; 7 | import com.yzs.yzsbaseactivitylib.yzsbase.YzsBaseFragment; 8 | import com.yzs.yzsbaseactivitylib.yzsbase.YzsBaseHomeFragment; 9 | 10 | /** 11 | * Author: 姚智胜 12 | * Version: V1.0版本 13 | * Description: 首页demo 14 | * Date: 2017/3/5 15 | */ 16 | public class IndexFragment extends YzsBaseHomeFragment { 17 | 18 | 19 | public static IndexFragment newInstance() { 20 | 21 | Bundle args = new Bundle(); 22 | IndexFragment fragment = new IndexFragment(); 23 | fragment.setArguments(args); 24 | return fragment; 25 | } 26 | 27 | private String[] mTitles = {"首页", "消息", "联系人", "更多"}; 28 | 29 | private int[] mIconUnselectIds = { 30 | R.drawable.tab_home_unselect, R.drawable.tab_speech_unselect, 31 | R.drawable.tab_contact_unselect, R.drawable.tab_more_unselect}; 32 | private int[] mIconSelectIds = { 33 | R.drawable.tab_home_select, R.drawable.tab_speech_select, 34 | R.drawable.tab_contact_select, R.drawable.tab_more_select}; 35 | 36 | @Override 37 | protected void initLogic() { 38 | 39 | } 40 | 41 | @Override 42 | protected int getLayoutRes() { 43 | return R.layout.fg_index; 44 | } 45 | 46 | @Override 47 | protected void onTabSelect(int position) { 48 | mTabLayout.hideMsg(position); 49 | } 50 | 51 | @Override 52 | protected void onTabReselect(int position) { 53 | 54 | } 55 | 56 | @Override 57 | protected void initTab() { 58 | setmFragments(new YzsBaseFragment[]{HomeFragment.newInstance(), WebFragment.newInstance(), 59 | MsgFragment.newInstance(), MyFragment.newInstance()}); 60 | 61 | //如果不想显示图标,最简便的方法就是直接不调用这两个方法 62 | // setmIconSelectIds(mIconSelectIds); 63 | // setmIconUnSelectIds(mIconUnselectIds); 64 | 65 | setmTitles(mTitles); 66 | setInitChooseTab(0); 67 | } 68 | 69 | @Override 70 | public boolean showToolBar() { 71 | return false; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /app/src/main/java/com/yzs/yzsbaseactivity/fragment/ListMvpDemoFragment.java: -------------------------------------------------------------------------------- 1 | package com.yzs.yzsbaseactivity.fragment; 2 | 3 | import android.os.Bundle; 4 | import android.util.Log; 5 | import android.view.View; 6 | 7 | import com.chad.library.adapter.base.BaseQuickAdapter; 8 | import com.chad.library.adapter.base.BaseViewHolder; 9 | import com.gyf.barlibrary.ImmersionBar; 10 | import com.orhanobut.logger.Logger; 11 | import com.yzs.yzsbaseactivity.R; 12 | import com.yzs.yzsbaseactivity.base.BaseMvpListFragment; 13 | import com.yzs.yzsbaseactivity.contract.TestMvpListContract; 14 | import com.yzs.yzsbaseactivity.layout.CustomLoadMoreView; 15 | import com.yzs.yzsbaseactivity.model.TestModel; 16 | import com.yzs.yzsbaseactivity.presenter.TestPresenter; 17 | import com.yzs.yzsbaseactivitylib.entity.BaseListType; 18 | 19 | import java.util.List; 20 | 21 | /** 22 | * Author: 姚智胜 23 | * Version: V1.0版本 24 | * Description: 25 | * Date: 2017/7/4 26 | * Email: 541567595@qq.com 27 | */ 28 | 29 | public class ListMvpDemoFragment extends BaseMvpListFragment implements 30 | TestMvpListContract.View { 31 | private static final String TAG = "ListMvpDemoFragment"; 32 | 33 | private boolean isRefresh = false; 34 | private boolean isFail = false; 35 | 36 | public static ListMvpDemoFragment newInstance() { 37 | 38 | Bundle args = new Bundle(); 39 | 40 | ListMvpDemoFragment fragment = new ListMvpDemoFragment(); 41 | fragment.setArguments(args); 42 | return fragment; 43 | } 44 | 45 | @Override 46 | protected void initView(View view) { 47 | super.initView(view); 48 | setMvp(true); 49 | } 50 | 51 | @Override 52 | protected void immersionInit(ImmersionBar mImmersionBar) { 53 | mImmersionBar 54 | .statusBarView(R.id.yzs_view, rootView) 55 | .statusBarColor(R.color.md_blue_300) 56 | .navigationBarColor(R.color.md_blue_300) 57 | .init(); 58 | } 59 | 60 | 61 | @Override 62 | public void initPresenter() { 63 | mPresenter.setVM(this, mModel); 64 | } 65 | 66 | @Override 67 | protected void initLogic() { 68 | setmPageSize(10);//该方法为设置自动加载的每页数量,默认为10 69 | mAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { 70 | @Override 71 | public void onItemClick(BaseQuickAdapter adapter, View view, int position) { 72 | start(ListMvpDemoFragment.newInstance()); 73 | } 74 | }); 75 | autoRefresh(); 76 | } 77 | 78 | @Override 79 | public void showData(List list) { 80 | try { 81 | if (isRefresh) { 82 | autoListLoad(list, "", R.drawable.empty_address); 83 | } else { 84 | if (isFail) { 85 | isFail = false; 86 | autoListLoad(list, "", R.drawable.empty_address, true); 87 | } else { 88 | isFail = true; 89 | autoListLoad(list, "", R.drawable.empty_address); 90 | } 91 | } 92 | } catch (Exception e) { 93 | Logger.e(TAG, e); 94 | } 95 | } 96 | 97 | @Override 98 | protected int initItemLayout() { 99 | return R.layout.item_list_demo; 100 | } 101 | 102 | @Override 103 | protected void initSetting() { 104 | isOpenLoad(true, true);//是否开启加载和刷新 105 | setListType(BaseListType.LINEAR_LAYOUT_MANAGER, true);//设置展示方式 106 | // setSpanCount(4);//为grid样式和瀑布流设置横向或纵向数量 107 | } 108 | 109 | @Override 110 | protected void MyHolder(BaseViewHolder baseViewHolder, String t) { 111 | baseViewHolder.setText(R.id.tv_item_test, t); 112 | } 113 | 114 | 115 | @Override 116 | protected void refreshListener() { 117 | isRefresh = true; 118 | setPage(1); 119 | mPresenter.getDataRequest(getPage()); 120 | } 121 | 122 | @Override 123 | protected void loadMoreListener() { 124 | isRefresh = false; 125 | Log.e("page", "page" + getPage()); 126 | mPresenter.getDataRequest(getPage()); 127 | } 128 | 129 | @Override 130 | public void showLoading(String title) { 131 | 132 | } 133 | 134 | @Override 135 | public void stopLoading() { 136 | 137 | } 138 | 139 | @Override 140 | public void showErrorTip(String msg) { 141 | 142 | } 143 | 144 | @Override 145 | public boolean showToolBar() { 146 | return true; 147 | } 148 | 149 | @Override 150 | protected boolean immersionEnabled() { 151 | return true; 152 | } 153 | 154 | } -------------------------------------------------------------------------------- /app/src/main/java/com/yzs/yzsbaseactivity/fragment/MsgFragment.java: -------------------------------------------------------------------------------- 1 | package com.yzs.yzsbaseactivity.fragment; 2 | 3 | import android.os.Bundle; 4 | import android.os.Handler; 5 | import android.view.View; 6 | import android.widget.Button; 7 | 8 | import com.chad.library.adapter.base.BaseViewHolder; 9 | import com.gyf.barlibrary.ImmersionBar; 10 | import com.yzs.yzsbaseactivity.R; 11 | import com.yzs.yzsbaseactivity.base.BaseListFragment; 12 | import com.yzs.yzsbaseactivitylib.entity.BaseListType; 13 | 14 | import java.util.ArrayList; 15 | import java.util.List; 16 | 17 | 18 | /** 19 | * Author: 姚智胜 20 | * Version: V1.0版本 21 | * Description: ListFragment的demo(与activity几乎同样用法) 22 | * Date: 2016/12/15. 23 | */ 24 | public class MsgFragment extends BaseListFragment { 25 | 26 | private int pageSize = 20; 27 | 28 | private Button button; 29 | 30 | private boolean isGrid = true; 31 | /** 32 | * 模拟加载错误 33 | */ 34 | private boolean isFail = true; 35 | 36 | public static MsgFragment newInstance() { 37 | Bundle args = new Bundle(); 38 | MsgFragment fragment = new MsgFragment(); 39 | fragment.setArguments(args); 40 | return fragment; 41 | } 42 | 43 | @Override 44 | protected void immersionInit(ImmersionBar mImmersionBar) { 45 | // mImmersionBar 46 | // .statusBarView(R.id.yzs_view, rootView) 47 | // .statusBarColor(R.color.md_blue_300) 48 | // .navigationBarColor(R.color.md_blue_300) 49 | // .init(); 50 | mImmersionBar 51 | .statusBarView(R.id.yzs_view,rootView) 52 | .statusBarColor(R.color.md_blue_300) 53 | .navigationBarColor(R.color.md_blue_300) 54 | .init(); 55 | } 56 | 57 | @Override 58 | protected int getLayoutRes() { 59 | return R.layout.fg_demo_change_list; 60 | } 61 | 62 | @Override 63 | protected void initView(View view) { 64 | super.initView(view); 65 | button = (Button) view.findViewById(R.id.btn_change); 66 | button.setOnClickListener(new View.OnClickListener() { 67 | @Override 68 | public void onClick(View v) { 69 | if (isGrid) { 70 | changeShowType(BaseListType.LINEAR_LAYOUT_MANAGER, true); 71 | isGrid = false; 72 | } else { 73 | changeShowType(BaseListType.GRID_LAYOUT_MANAGER, true); 74 | isGrid = true; 75 | } 76 | } 77 | }); 78 | 79 | } 80 | 81 | 82 | @Override 83 | protected void initLogic() { 84 | setmPageSize(pageSize);//该方法为设置自动加载的每页数量,如果不足,则判定为结束 85 | autoRefresh(); 86 | } 87 | 88 | @Override 89 | protected int initItemLayout() { 90 | return R.layout.item_list_demo; 91 | } 92 | 93 | @Override 94 | protected void initSetting() { 95 | 96 | isOpenLoad(true, true);//是否开启加载和刷新 97 | setListType(BaseListType.GRID_LAYOUT_MANAGER, true);//设置展示方式 98 | setSpanCount(4);//为grid样式和瀑布流设置横向或纵向数量 99 | // setLoadMordTypeLayout(new CustomLoadMoreView());//可以不设置,有默认 100 | } 101 | 102 | @Override 103 | protected void MyHolder(BaseViewHolder baseViewHolder, String s) { 104 | baseViewHolder.setText(R.id.tv_item_test, s); 105 | } 106 | 107 | @Override 108 | protected void refreshListener() { 109 | setPage(1); 110 | new Handler().postDelayed(new Runnable() { 111 | @Override 112 | public void run() { 113 | //该方法使用在回调数据中,此为假数据所所以在这里使用 114 | autoListLoad(addData(getPage()), "", R.drawable.empty_address); 115 | } 116 | }, 1000); 117 | } 118 | 119 | 120 | @Override 121 | protected void loadMoreListener() { 122 | new Handler().postDelayed(new Runnable() { 123 | @Override 124 | public void run() { 125 | 126 | if (getPage() < 5) { 127 | if (isFail) { 128 | isFail = false; 129 | //此时为获取失败,调用该方法 130 | autoListLoad(addData(getPage()), "", R.drawable.empty_address, true); 131 | } else { 132 | isFail = true; 133 | autoListLoad(addData(getPage()), "", R.drawable.empty_address); 134 | } 135 | } else { 136 | autoListLoad(addData(getPage()), "", R.drawable.empty_address); 137 | } 138 | 139 | } 140 | }, 1000); 141 | 142 | } 143 | 144 | 145 | private List addData(int page) { 146 | List list = new ArrayList<>(); 147 | String string; 148 | for (int i = 0; i < pageSize; i++) { 149 | string = "第" + page + "页" + "第" + i + "个"; 150 | list.add(string); 151 | } 152 | return list; 153 | } 154 | 155 | @Override 156 | public boolean showToolBar() { 157 | return true; 158 | } 159 | @Override 160 | protected boolean immersionEnabled() { 161 | return true; 162 | } 163 | } 164 | 165 | -------------------------------------------------------------------------------- /app/src/main/java/com/yzs/yzsbaseactivity/fragment/MyFragment.java: -------------------------------------------------------------------------------- 1 | package com.yzs.yzsbaseactivity.fragment; 2 | 3 | import android.os.Bundle; 4 | import android.util.Log; 5 | import android.view.View; 6 | 7 | import com.gyf.barlibrary.ImmersionBar; 8 | import com.yzs.yzsbaseactivity.R; 9 | import com.yzs.yzsbaseactivity.base.BaseFragment; 10 | 11 | 12 | /** 13 | * Author: 姚智胜 14 | * Version: V1.0版本 15 | * Description: 16 | * Date: 2016/12/28. 17 | */ 18 | public class MyFragment extends BaseFragment { 19 | 20 | public static MyFragment newInstance() { 21 | 22 | Bundle args = new Bundle(); 23 | MyFragment fragment = new MyFragment(); 24 | fragment.setArguments(args); 25 | return fragment; 26 | } 27 | 28 | @Override 29 | protected void immersionInit(ImmersionBar mImmersionBar) { 30 | mImmersionBar 31 | .statusBarView(R.id.yzs_view,rootView) 32 | .statusBarColor(R.color.md_blue_300) 33 | .navigationBarColor(R.color.md_blue_300) 34 | .init(); 35 | } 36 | 37 | @Override 38 | protected void initLogic() { 39 | 40 | } 41 | 42 | @Override 43 | public boolean showToolBar() { 44 | return true; 45 | } 46 | 47 | @Override 48 | protected int getLayoutRes() { 49 | return R.layout.item_list_demo; 50 | } 51 | 52 | @Override 53 | protected void initView(View rootView) { 54 | 55 | } 56 | @Override 57 | protected boolean immersionEnabled() { 58 | return true; 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /app/src/main/java/com/yzs/yzsbaseactivity/fragment/WebFragment.java: -------------------------------------------------------------------------------- 1 | package com.yzs.yzsbaseactivity.fragment; 2 | 3 | import android.os.Bundle; 4 | 5 | import com.gyf.barlibrary.ImmersionBar; 6 | import com.yzs.yzsbaseactivity.R; 7 | import com.yzs.yzsbaseactivitylib.yzsbase.YzsBaseWebFragment; 8 | 9 | /** 10 | * Author: 姚智胜 11 | * Version: V1.0版本 12 | * Description: 13 | * Date: 2017/7/4 14 | * Email: 541567595@qq.com 15 | */ 16 | 17 | public class WebFragment extends YzsBaseWebFragment { 18 | 19 | public static WebFragment newInstance() { 20 | 21 | Bundle args = new Bundle(); 22 | 23 | WebFragment fragment = new WebFragment(); 24 | fragment.setArguments(args); 25 | return fragment; 26 | } 27 | 28 | @Override 29 | protected void initLogic() { 30 | 31 | initWeb("https://www.baidu.com/"); 32 | } 33 | 34 | @Override 35 | protected void immersionInit(ImmersionBar mImmersionBar) { 36 | mImmersionBar 37 | .statusBarView(R.id.yzs_view,rootView) 38 | .statusBarColor(R.color.md_blue_300) 39 | .navigationBarColor(R.color.md_blue_300) 40 | .init(); 41 | } 42 | 43 | 44 | @Override 45 | public boolean showToolBar() { 46 | return true; 47 | } 48 | 49 | @Override 50 | protected boolean immersionEnabled() { 51 | return true; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/com/yzs/yzsbaseactivity/layout/CustomLoadMoreView.java: -------------------------------------------------------------------------------- 1 | package com.yzs.yzsbaseactivity.layout; 2 | 3 | 4 | import com.chad.library.adapter.base.loadmore.LoadMoreView; 5 | import com.yzs.yzsbaseactivity.R; 6 | 7 | /** 8 | * Author 姚智胜 9 | * Version V1.0版本 10 | * Description: recyclerview的load状态各种布局 11 | * Date: 2017/3/28 12 | */ 13 | 14 | public final class CustomLoadMoreView extends LoadMoreView { 15 | 16 | @Override 17 | public int getLayoutId() { 18 | return R.layout.quick_view_load_more; 19 | } 20 | 21 | @Override 22 | protected int getLoadingViewId() { 23 | return R.id.load_more_loading_view; 24 | } 25 | 26 | @Override 27 | protected int getLoadFailViewId() { 28 | return R.id.load_more_load_fail_view; 29 | } 30 | 31 | @Override 32 | protected int getLoadEndViewId() { 33 | return R.id.load_more_load_end_view; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/yzs/yzsbaseactivity/model/TestModel.java: -------------------------------------------------------------------------------- 1 | package com.yzs.yzsbaseactivity.model; 2 | 3 | import android.os.Handler; 4 | 5 | import com.yzs.yzsbaseactivity.contract.TestMvpListContract; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | /** 11 | * Author: 姚智胜 12 | * Version: V1.0版本 13 | * Description: model层demo 14 | * Date: 2017/7/3 15 | * Email: 541567595@qq.com 16 | */ 17 | 18 | public class TestModel implements TestMvpListContract.Model { 19 | 20 | 21 | @Override 22 | public void onDestroy() { 23 | 24 | } 25 | 26 | @Override 27 | public void getData(final int page, final OnFinishedListener listener) { 28 | new Handler().postDelayed(new Runnable() { 29 | @Override 30 | public void run() { 31 | listener.onFinished(getData(page)); 32 | } 33 | }, 1000); 34 | } 35 | 36 | 37 | public List getData(final int page) { 38 | 39 | List list = new ArrayList<>(); 40 | String string; 41 | for (int i = 0; i < (page < 4 ? 10 : 5); i++) { 42 | string = "第" + page + "页" + "第" + i + "个"; 43 | list.add(string); 44 | } 45 | return list; 46 | 47 | } 48 | 49 | 50 | } 51 | -------------------------------------------------------------------------------- /app/src/main/java/com/yzs/yzsbaseactivity/presenter/TestPresenter.java: -------------------------------------------------------------------------------- 1 | package com.yzs.yzsbaseactivity.presenter; 2 | 3 | 4 | import com.yzs.yzsbaseactivity.contract.TestMvpListContract; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * Author: 姚智胜 10 | * Version: V1.0版本 11 | * Description: Presenter的demo 12 | * Date: 2017/7/3 13 | * Email: 541567595@qq.com 14 | */ 15 | 16 | public class TestPresenter extends TestMvpListContract.Presenter implements TestMvpListContract.Model.OnFinishedListener { 17 | 18 | @Override 19 | public void getDataRequest(int page) { 20 | mModel.getData(page, this); 21 | } 22 | 23 | @Override 24 | public void onFinished(List items) { 25 | mView.showData(items); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/empty_address.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaozs/YzsBaseActivity/135ab39748cd2c734020fdfad47d942ac62dec80/app/src/main/res/drawable-xhdpi/empty_address.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_contact_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaozs/YzsBaseActivity/135ab39748cd2c734020fdfad47d942ac62dec80/app/src/main/res/drawable-xhdpi/tab_contact_select.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_contact_unselect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaozs/YzsBaseActivity/135ab39748cd2c734020fdfad47d942ac62dec80/app/src/main/res/drawable-xhdpi/tab_contact_unselect.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_home_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaozs/YzsBaseActivity/135ab39748cd2c734020fdfad47d942ac62dec80/app/src/main/res/drawable-xhdpi/tab_home_select.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_home_unselect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaozs/YzsBaseActivity/135ab39748cd2c734020fdfad47d942ac62dec80/app/src/main/res/drawable-xhdpi/tab_home_unselect.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_more_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaozs/YzsBaseActivity/135ab39748cd2c734020fdfad47d942ac62dec80/app/src/main/res/drawable-xhdpi/tab_more_select.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_more_unselect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaozs/YzsBaseActivity/135ab39748cd2c734020fdfad47d942ac62dec80/app/src/main/res/drawable-xhdpi/tab_more_unselect.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_speech_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaozs/YzsBaseActivity/135ab39748cd2c734020fdfad47d942ac62dec80/app/src/main/res/drawable-xhdpi/tab_speech_select.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_speech_unselect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaozs/YzsBaseActivity/135ab39748cd2c734020fdfad47d942ac62dec80/app/src/main/res/drawable-xhdpi/tab_speech_unselect.png -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 24 | 25 | 33 | 34 | 43 | 44 | 45 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fg_demo_change_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 |