If you're confused about Android development, maybe it's time to open the door to a new world .
TMVP is a Aop Architecture with Apt、AspectJ、Javassisit,which based on Realm+Databinding+MVP+Retrofit+Rxjava2+MaterialDesign。
Build more complex functions with cleaner code,talk is cheap ,show u the code:
The following code to achieve the list of users to obtain the request, paging, display,just a sentence to achieve the entire complex module(ApiFactory is automatically generated by apt):
mViewBinding.lvUser.getPresenter().setRepository(ApiFactory::getAllUser).fetch();
The user list itemType is its layoutId, set by attr in xml:
<com.base.adapter.TRecyclerView
android:id="@+id/lv_user"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:isRefreshable="false"
app:itemType="@layout/list_item_user"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
no Adapter,no ViewHolder,no onRefreshListener,on onLoadMoreListener
maybe u will like it.
===============Gorgeous dividing line===================
===============华丽丽的分界线===================
####为兼容linux、ubuntu等系统,已发布插件到本地repo文件夹下,如果你对插件内容有所修改,则需要重新发布,运行前需要在Terminal中运行 ./gradlew -p buildsrc clean build uploadArchives --info
#更新日志:
2017/1/31:AOP新增SysPermissionAspect支持动态申请系统权限切片,轻松适配6.0+
2017/1/27:AOP新增DbRealmAspect支持Realm数据库,数据库突破你想像的简单(年夜特供)
2017/1/9: AOP新增CheckLoginAspect切片拦截未登陆用户,控制未登陆用户的操作权限
2017/1/8: 使用Apt封装Retrofit生成ApiFactory替换掉所有的Repository,狂删代码
2017/1/7: 使用DataBinding替换掉所有的ButterKnife,狂删代码
2017/1/6: 使用DataBinding替换掉所有的ViewHolder,狂删代码,从此迈向新时代
2016/12/30:使用Apt生成全局路由TRouter,更优雅的页面跳转,支持传递参数和共享view转场动画
2016/12/29:去掉BaseMultiVH新增VHSelector支持更完美的多ViewHolder
2016/12/28:使用Apt生成全局的ApiFactory替代所有的Model
2016/12/27:增加了BaseMultiVH扩展支持多类型的ViewHolder
2016/12/26:抽离CoreAdapterPresenter优化TRecyclerView
#系列文章:
全局路由TRouter,更优雅的页面跳转
加入OkBus,实现注解传递事件
##安卓AOP三剑客:APT,AspectJ,Javassist
1、去掉所有反射>2、新增apt初始化工厂,替换掉了dagger2。>3、新增aop切片,处理缓存和日志
关键词 AOP+MVP+Retrofit+Rxjava+MaterialDesign+LeanCloud+NodeJS
简书:http://www.jianshu.com/p/b49958e1889d
weibo:http://weibo.com/1917320262
Github:https://github.com/north2016/T-MVP
#答疑运行报错的,自觉google,检查As版本(2.2.2),gradle配置等(AndroidStudio每个版本gradle的api都不一样,坑),低版本手机FloatingActionButton在xml会报错,因为icon用了SVG(5.0+)
参考配置: as:2.2.2 grade:2.2.3 buildTools:24.0.3
本demo现阶段处于快速优化迭代状态,只提供idea,暂不提供lib
Copyright 2016 north
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
参考 灵活利用泛型的MVP模式T-MVP(附带一个快速创建MVP接口的Android Studio插件-TMVPHelper)
MVP是安卓开发的大趋势,对于安卓开发日渐成熟的今天,架构不可避免,也是成为高级开发者的必经之路。 RxJava虽然不是安卓开发者的必备技能,但是对于安卓开发来说是一利器,而且使用也越来越广泛,掌握RxJava也是必备技能之一。由RxJava衍生的RxBus等,可能会替代现有的EventBus,Otto,既然有更好用的,我们当然要学了。 这篇文章讲的就是利用泛型进行mvp瘦身,值得学习。转载 T-
大家好,我是苍王。 以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章。 [Android]如何做一个崩溃率少于千分之三噶应用app--章节列表 相信有关注我的人,都会看过我上一编介绍的Todo-mvp源码体验,这是基础编。 这个系列的课程适合研发有Android有一年半左右的同学参考。 今天介绍的TODO-MVP-Loaders是Todo-mvp的进阶编。 可以对比一下
题目描述: 在星球争霸篮球赛对抗赛中,强大的宇宙战队,希望每个人都能拿到MVP。 MVP的条件是,单场最高分得分获得者,可以并列,所以宇宙战队决定在比赛中,尽可能让更多的队员上场,且让所有有得分的队员得分都相同。 然而比赛过程中的每一分钟的得分都只能由某一个人包揽。 输入描述: 输入第一行为一个数字t,表示有得分的分钟数( 1 <= t <= 50),第二行为t个数字,代表每一分钟的得分p(1 <
描述 (Description) 字符\t匹配制表符。 例子 (Example) 以下示例显示了字符匹配的用法。 package com.wenjiangs; import java.util.regex.Matcher; import java.util.regex.Pattern; public class CharactersDemo { private static final St
我只是想说清楚,我的意思是这样的- 另外,如果我访问第一个数组以外的元素,也会遇到同样的问题,即(INT*)arr+13。它会属于越界访问的条款吗?因为我是在第一个数组的边界之外访问的。
描述 (Description) 如果存在这样的注释,则java.lang.reflect.Method.getAnnotation(Class《T》 annotationClass)方法返回指定类型的此元素的注释,否则为null。 声明 (Declaration) 以下是java.lang.reflect.Method.getAnnotation(Class《T》 annotationClass
描述 (Description) 如果存在这样的注释,则java.lang.reflect.Field.getAnnotation(Class《T》 annotationClass)方法返回指定类型的此元素的注释,否则为null。 声明 (Declaration) 以下是java.lang.reflect.Field.getAnnotation(Class《T》 annotationClass)方
描述 (Description) 如果存在这样的注释,则java.lang.reflect.Constructor.getAnnotation(Class《T》 annotationClass)方法返回指定类型的此元素的注释,否则为null。 声明 (Declaration) 以下是java.lang.reflect.Constructor.getAnnotation(Class《T》 annot
描述 (Description) java.lang.reflect.AccessibleObject.getAnnotation(Class annotationClass) java.lang.reflect.AccessibleObject.getAnnotation(Class annotationClass) 如果存在这样的注释,则method返回此元素的指定类型的注释,否则返回null