自从Android SDK更新到22.6.3,发现新建Activity的时候,会自己主动生成一个Fragment。这个Fragment是activity的静态内部类。同一时候生成了一个xml叫fragment_main.xml。打开activity_main.xml发现,仅仅剩一个容器。非常明显。谷歌希望大伙把UI写在fragment中。

从Fragment出来后,我和朋友讨论过,说谷歌这样子造成了一种混乱。

一个APP,能够仅仅用activity来实现。也即一个APP是同多个Activity构成。也能够仅仅有一个activity。由多个fragment来实现。也能够多个activity和多个fragment混合来实现。

究竟怎么用,没有人给出答案。不知是不是我信息不畅。谷歌推出了什么新功能。差点儿没有找到文章说,为什么要这样?这种优缺点是什么?谷歌官方也没有给出什么答案。

如今这个新的SDK。算是谷歌用实际行动给出答案了。也就是希望人们多用fragment。少用activity。

可是对这种一种转变,尚缺少最佳实践之类的指导。比方说fragment之间的跳转。replace还是show/hide,都没有什么指导。如今大伙都非常忙,假设有人能给出最佳实践,就不须要自己去摸索,由于摸索下去其结果也大同小异,好的东西好的想法,大家终于都殊途同归。所以假设有人能给出最佳实践。显然能节约非常多时间。而做这个工作的人最适合的就是谷歌。为什么要加这个,为什么要加这样,显然是谷歌最先思考的,他们应该把优缺点想得非常透,才选择这样做。

那么把他们的想法发布出来,无疑是最直接最彻底的最佳实践。我并没有找到谷歌公司官方发布的说明文档。可能是我信息不灵通。假设有人知道谷歌做这个。还麻烦告知一下。

只是。由于历史包袱问题。如今谷歌也没有彻底变过来。

比方说,尽管生成了一个PlaceholderFragment,界面要写在fragment中。可是在xml中写中简便方法android:onClick。却是调用acitvity中的。假设一个activity要给多个fragment用,那么这样的简便写法差点儿就不可用,算是废掉了。这个PlaceholderFragment也没什么实际用途。象征大于实际。真要独立。Fragment就不是必需搞成内部类。

假设习惯用activity来处理事情,那么显示对SDK自作主张生成fragment非常不满,所以网上非常多人都直接把fragment给删了。假设不删,一个activity就平白无故多出一个文件,搞得项目中文件太多。

假设认为烦,这仅仅能说明大伙要拥抱变化了。

Fragment出来之初,想用来解决手机和平板适配的问题。但结果显然不尽如人意,从我个人的实际体验来说,我宁愿平板上跑的手机的放大版。自己主动适配。确实太难了。

把Fragment视为可复用的带逻辑的组件。反倒更适合。

我认为这是Fragment最大的用途。仅仅从界面来讲,Fragment和View没什么差别,但View的代码和View不是一个总体。而Fragment则是一个总体。不管嵌入到哪个activity中,都能独立运行对应的功能。

这样就须要我们在设计之初,进行比activity更加仔细的思考。

新版SDK自己主动加入PlaceholderFragment的思考的更多相关文章

  1. 关于新版SDK报错You need to use a Theme.AppCompat theme的两种解决办法

    android的一个小问题: Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme ( ...

  2. 关于新版SDK报错You need to use a Theme.AppCompat theme的两种解决办法 - 转

    android的一个小问题: Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme ( ...

  3. 使用新版SDK不想跳转微博客户端能否直接发送微博分享?

    如题啊如题! 新版本中没有StatusesAPI?????

  4. SDK踩坑全纪录

    No1: Unity2017.1版本导出的android工程放到Android Studio上跑起来非常卡,Unity2017.3或4版本导出就没问题. 对比后发现gradle文件有差异,特此标注 1 ...

  5. Flash访问模块FDS用法及常见问题—nRF5 SDK模块系列一

    FDS,全称Flash Data Storage,用来访问芯片内部Flash的.当你需要把数据存储在Flash中,或者读取Flash中的用户数据,或者更新或者删除Flash中的数据,那么FDS模块是你 ...

  6. 新浪微博.Net SDK第三版源代码和示例【最后一次更新了】

    时间过得飞快,距离上次SDK更新已经3年有余.随着官方的不断跟新,老版SDK的部分接口已经不能正常使用.因此在QQ群里来吐槽的.来谩骂的朋友也开始多了起来.随着时代的发展,微博已经彻底的被微信甩开,因 ...

  7. Android SDK开发包国内下载地址

    不知道是因为最近kaihui还是怎么的,打开android sdk官方网站特别的慢,想下载最新版本的platform几乎变成不可能完成的任务,不知道为什么Google不像Apache那样在各国设立镜像 ...

  8. [转] Android SDK manager 无法获取更新版本列表

      打开这个网址(LINK)就可以看到adt的详细信息. 或者直接在你的eclipse的Help > Install New Software里面add,地址直接输入 https://dl-ss ...

  9. Android SDK 离线安装方法

    有朋友反映从连接直接下载安装包不能获取到最新版本(每次更新后的包地址需要重新去查找),而且经常无法访问. 最方便的方法是使用代理或vpn接入网络,即可及时下载最新版sdk. 作为一名开发人员,流畅地浏 ...

随机推荐

  1. URL vs. HTML 录制模式

    转自:http://blog.csdn.net/testing_is_believing/article/details/5274188 一般来说,如果是标准使用IE访问的B/S架构,应该使用HTML ...

  2. JSP的学习(7)——九大隐式对象之pageContext对象

    本篇来讲诉JSP中九大隐式对象中最后一个,也是最重要的一个对象——pageContext对象. pageContext对象代表了该JSP页面的运行环境,它的作用有: ① 这个对象封装了对其它八大隐式对 ...

  3. 微信JSAPI支付(比较详细) 关于getRrandWCPayRequest:fail_invalid appid 错误

    原文:微信JSAPI支付(比较详细) 关于getRrandWCPayRequest:fail_invalid appid 错误 首先微信支付需注册  微信公从平台开发 和 微信支付商户平台 关于4个密 ...

  4. Android中 Bitmap Drawable Paint的获取、转换以及使用

    比如Drawable中有一系列连续的图片,img_0.png, img_1.png, img_2.png ... 如果要动态获取这些图片,通过"R.drawable.img_x"的 ...

  5. 测试kestrel的队列

    一.依赖环境的安装  1.sbt  wget http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-tools.s ...

  6. hdu 4704 同余定理+普通快速幂

    此题往后推几步就可找到规律,从1开始,答案分别是1,2,4,8,16.... 这样就可以知道,题目的目的是求2^n%Mod的结果.....此时想,应该会想到快速幂...然后接着会发现,由于n的值过大, ...

  7. 我在知乎上关于Laser200/310电脑的文章。

    我是30年前从Laser-310起步的,我来回答这个问题. 主要硬件规格: CPU:Z-80A/4.7MHz主频 16K RAM + 2K Video RAM 16K ROM 磁带输出:波特率300 ...

  8. hdu1869 六度分离(Floyd)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1869 转载请注明出处:http://blog.csdn.net/u012860063?viewmode ...

  9. 消息函数一般是私有的,因为不需要程序员显示的调用,但子类如果需要改写这个方法,则改成保护方法Protected

    许多的面向对象程序设计语言都支持对消息的处理.消息处理是一种动态响应客户类发出的请求,它与过程调用不同.过程调用中,客户类必须知道服务类提供了哪些过程,以及每个过程的调用约定,并且在调用时需要明确指出 ...

  10. js检测是否手机浏览的函数

    原文:js检测是否手机浏览的函数 查看一个web应用的时候查看源代码无意发现的,记录一下,万能什么时候能用得着呢! function isMobile() { var mobile = navigat ...