前言
最近一直在想着能否有一种更好的方案来解决:Android中Activity与Fragment之间通信的问题,什么叫更好呢,就是能让Fragment的复用性高,性能还有好(不用反射),代码还要好维护,不需要为每对Activity和Fragment之间定义接口而发愁。
先简单说下Javascript这门语言吧,或许有人就会问:咱们不是聊Android的java问题吗?怎么话题转到JavaScript了。因为我的解决方案的启发是从它来的,没兴趣的朋友可以略过。最近在学习javascript这门语言,同时自己搞Android(java)开发也有5年多时间了,所以在学习js的过程中,就会惯性的把这两者进行比较。
与java语言的 严谨 相比 Javascript是一门“放荡不羁”、”不拘小节”(宽泛)的语言。
为什么要用“放荡不羁”这个词呢,下面是它的一个解释:
放荡不羁 [fàng dàng bù jī][解释] 羁:约束。放纵任性,不加检点,不受约束。
因为我觉得这个词更能充分的体现js弱类型的特点。
在给变量赋值时 可以这样写:
1 |
var a = 1; |
还可以这样写:
1 2 |
var b = '123'; var o = new Object(); |
甚至还可以这样写:
1 2 |
var fun = new function(){}; fun1 = new function(){}; |
可以把任何类型的值赋给一个变量,也可以不加var关键字来声明一个变量,是不是很任性,很不拘束啊。
“不拘小节”主要体现了JavaScript的语法更宽泛、更简单的特点: 比如:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
js代码: //函数声明不需要定义返回值,参数前面不需要有类型出现, //函数体里面就可以有返回值 function max(a,b){ return a > b? a:b; } /* *可以传递任意多个参数,在java里面根本不可以 */ function print(){ var len = arguments.length; for(var i = 0; i b? a:b; } /* *传递任意多个Object类型的参数 */ void print(Object... args){ for (int i = 0; i |
上面的代码说明了JavaScript在声明函数时,不会有像java那么严格的规定,语法不拘小节,语法更简单(这里没有说java不好的意思)。
启发点
JavaScript中有一个重要的点(万事万物皆对象),函数也不列外,并且函数可以作为另外一个函数的参数,如:
1 2 3 4 5 6 7 |
js代码: //遍历一个数组如果是它是数组,就把它乘以10再输出 var array = [1,2, '你好' , '不' ,31,15]; //数组的each方法接收一个函数 testArray.each( function( value ){ typeof value == 'number' ? alert( value *10 ):null; }) ; |
当我看到上面JavaScript中函数的用法时我眼前一亮,为啥我不可以借鉴之来解决android中activity与fragment通信的问题呢?
Fragment的使命
先让我们聊聊Fragment为什么出现,这对于我们解决Activity与Fragment的通信有帮助。一个新事物的产生总是为了解决旧事物存在的问题,Fragment是android3.0的产物,在android3.0之前解决手机、平板电脑的适配问题是很头疼的,对ActivityGroup有印象的朋友,应该能深深的体会到ActivityGroup包裹的多个Activity之间切换等一系列的性能问题。由此Fragment诞生了。个人总结的Fragment的使命:
- 解决手机、平板电脑等各种设备的适配问题
- 解决多个Activity之间切换性能问题
- 模块化,因为模块化导致复用的好处
Fragment的使用
Fragment是可以被包裹在多个不同Activity内的,同时一个Activity内可以包裹多个Fragment,Activity就如一个大的容器,它可以管理多个Fragment。所有Activity与Fragment之间存在依赖关系。
Activity与Fragment通信方案
上文提到Activity与Fragment之间是存在依赖关系的,因此它们之间必然会涉及到通信问题,解决通信问题必然会涉及到对象之间的引用。因为Fragment的出现有一个重要的使命就是:模块化,从而提高复用性。若达到此效果,Fragment必须做到高内聚,低耦合。
现在大家动动脚趾都能想到的解决它们之间通信的方案有:handler,广播,EvnetBus,接口等(或许还有别的方案,请大家多多分享),那我们就聊下这些方案。
handler方案:
先上代码
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 |
public class MainActivity extends FragmentActivity{ //声明一个Handler public Handler mHandler = new Handler(){ @Override public void handleMessage(Mess ܌就是能让Fragment的复用性高,性能还有好(不用反射),代码还要好维护,不需要为每对Activity和Fragment之间定义接口而发愁。
先简单说下Javascript这门语言吧,或许有人就会问:咱们不是聊Android的java问题吗?怎么话题转到JavaScript了。因为我的解决方案的启发是从它来的,没兴趣的朋友可以略过。最近在学习javascript这门语言,同时自己搞Android(java)开发也有5年多时间了,所以在学习js的过程中,就会惯性的把这两者进行比较。 与java语言的 严谨 相比 Javascript是一门“放荡不羁”、”不拘小节”(宽泛)的语言。 为什么要用“放荡不羁”这个词呢,下面是它的一个解释:
因为我觉得这个词更能充分的体现js弱类型的特点。 在给变量赋值时 可以这样写:
还可以这样写:
甚至还可以这样写:
可以把任何类型的值赋给一个变量,也可以不加var关键字来声明一个变量,是不是很任性,很不拘束啊。 “不拘小节”主要体现了JavaScript的语法更宽泛、更简单的特点: 比如:
上面的代码说明了JavaScript在声明函数时,不会有像java那么严格的规定,语法不拘小节,语法更简单(这里没有说java不好的意思)。 启发点JavaScript中有一个重要的点(万事万物皆对象),函数也不列外,并且函数可以作为另外一个函数的参数,如:
当我看到上面JavaScript中函数的用法时我眼前一亮,为啥我不可以借鉴之来解决android中activity与fragment通信的问题呢? Fragment的使命先让我们聊聊Fragment为什么出现,这对于我们解决Activity与Fragment的通信有帮助。一个新事物的产生总是为了解决旧事物存在的问题,Fragment是android3.0的产物,在android3.0之前解决手机、平板电脑的适配问题是很头疼的,对ActivityGroup有印象的朋友,应该能深深的体会到ActivityGroup包裹的多个Activity之间切换等一系列的性能问题。由此Fragment诞生了。个人总结的Fragment的使命:
Fragment的使用Fragment是可以被包裹在多个不同Activity内的,同时一个Activity内可以包裹多个Fragment,Activity就如一个大的容器,它可以管理多个Fragment。所有Activity与Fragment之间存在依赖关系。 Activity与Fragment通信方案上文提到Activity与Fragment之间是存在依赖关系的,因此它们之间必然会涉及到通信问题,解决通信问题必然会涉及到对象之间的引用。因为Fragment的出现有一个重要的使命就是:模块化,从而提高复用性。若达到此效果,Fragment必须做到高内聚,低耦合。 现在大家动动脚趾都能想到的解决它们之间通信的方案有:handler,广播,EvnetBus,接口等(或许还有别的方案,请大家多多分享),那我们就聊下这些方案。 handler方案:先上代码
|