- 博客(13)
- 资源 (1)
- 收藏
- 关注
原创 Flutter 小技巧实现通用的局部刷新
前言在使用GlobalKey局部刷新方式中介绍了如何通过GlobalKey实现局部刷新优化性能,只是每次我们进行局部刷新的时候 都需要定义widget、定义state、实现build方法等。教程还是不错的,简单易懂,但是在实际使用过程中就不免有些许麻烦。今天我们通过一个小技巧来实现一个通用的局部刷新Widget实现思路当widget需要进行刷新时,我们可以通过调用widget的setState方法来实现,setState随后会调用State的build方法来进行重建 //请求刷新 setSta
2020-09-28 17:02:19 653
原创 完美解决DialogFragment Can not perform this action after onSaveInstanceState 问题
完美解决DialogFragment Can not perform this action after onSaveInstanceState 问题问题解析参考一下掘金一位大佬的解释让你不再俱怕 Fragment State Loss简单的来说,就是dialogFragment所依赖的Fragment/FragmentActivity,在***onSaveInstance***之后,会调用dialogFragment的saveAllState,使得fragmennt的成员变量mStateSaved
2020-09-27 17:08:15 7578
原创 适配器模式
废话一下上一篇我们说到装饰者模式,通过 装饰者模式我们可以增强/消弱类的功能或做一些额外的处理。如果我想直接修改类的实现呢?(装饰者模式只是添加额外的处理,原实现仍然保留),今天我们来看一下适配器模式适配器模式1、定义:将一个类的接口变换成客户端所期待的另外一种接口,从而使原本因进口不兼容而无妨一起工作的两个类能够在一起工作怎么来理解它呢?就是说,我想把一个类的实现转化成另外一个类。举个例子,现在有
2017-08-04 14:07:53 296
原创 装饰者模式
废话一下上一篇我们说到代理模式,通过 代理模式来实现对实际执行类的保护。如果实际执行类不能满足我们的需求怎么办呢?我需要做一些额外的处理。今天来看看装饰者模式是如何来实现的,同是我们来对比下代理模式和装饰者模式的区别装饰者模式1、定义:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰者模式相比生成子类更为灵活怎么来理解它呢?举个例子吧,就上篇的代理模式来举例,我想在加载图片前后添加一些额外的
2017-08-04 14:06:39 203
原创 代理模式
废话一下上一篇我们说到策略模式,通过策略模式我们来实现动态切换算法 在策略模式中,策略管理类的实现在一定程度上与代理模式相似,我们今天来看看他们之间的区别(注:这里的代理模式指的是静态代理) 策略模式链接代理模式1、定义:为其他对象提供一种代理以控制对这个对象的访问怎么来理解它呢?举个例子吧,这里就改一下上一篇的例子,我要实现图片加载,我想用Glide,但是glide呢不想让我访问 ,它说你
2017-08-04 14:04:02 251
原创 策略模式
废话一下看设计模式已经很久了,感觉自己也多少有些体会,这次我将从代码的角度去分析设计模式,将自己的一些理解记录分享一下。我将从策略模式出发,一步步将代码演化成其他设计模式,这将是一个比较有趣的过程,希望能够对读者有所帮助。废话少说,我们直接进入正题策略模式1、定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换怎么来理解它呢?就是说我要去完成一件事,有多种方式、途径,那么我把每种方式都封
2017-08-04 14:03:28 347
原创 apt-注解开发-4-使用
public class MainActivity extends AppCompatActivity { @LzfBindView(R.id.myText) TextView myTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreat
2017-05-25 14:28:01 238
原创 apt-注解开发-3-自定义processor
自定义processor[0]创建一个java module 命名为apt 在gradle中引入apply plugin: 'java'dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.google.auto.service:auto-service:1.0-rc2'
2017-05-25 14:25:12 253
原创 apt-注解开发-2-定义操作api
定义操作api[1]创建一个androidModule[2]定义findView的接口(多种findView所以做成接口 方便扩展)命名为ViewFinder[3]写一个activity的findview的实现类 命名为ActivityViewFinder[4]定义一个bindView接口(用于绑定view和解绑view)[5]写一个bindView的实现类[6]注意该module的gr
2017-05-25 14:23:36 250
原创 apt 注解开发-1-定义注解
定义注解参考资料http://www.jianshu.com/p/8d4cdb37e8f6[1]file->new module->选择java module 这里命名为annotation(随意)[2]src->new-> java class ->选择@Annotation 这里命名为LzfBindView[3]定义注解的示例 <!-- @Target说明了Annotat
2017-05-25 14:20:46 229
原创 plugin “XXX”is incompatible with this installation
概况在用intelliJ进行编写插件时,插件构建之后在android studio中无法安装该插件 plugin “XXX”is incompatible with this installation这是由于idea-version不支持产生的 我们只需修改这个值就可以解决了这里是stackoverflow上的一个回答plugin这里是官网的idea-version表 官网idea-version
2017-04-18 19:53:05 1304
原创 gradle 动态配置manifest
gradle 动态配置manifest在app开发过程中,我们难免会遇到一些三方sdk,他们都有着各自的key,每次打包时都要去更换这些key的正式环境和测试环境,小手一抖搞不好就换错了(万一忘了呢0.0),这里就是叫你如何通过配置,用最少的改动完成环境的切换manifest中key的配置 <meta-data android:name="UMENG_APPKEY"
2017-03-30 14:15:51 1566
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人