• 《Android编程权威指南》-读书笔记(十)-从一个内涵段子开始第二个例子


    《Android编程权威指南》-读书笔记(十) 第二个例子

    -从一个内涵段子开始第二个例子

    以前只知道写程序很牛X,结果学了这个专业才知道不是那回事,学的东西那么多,学完就忘。好容易写了个程序,写完了也忘的差不多了。最后我发现了这个事情的根源,这是一个智商问题。一直到有一天一个同学给我讲了一个内涵段子。

    从前有一个旅者在深山老林里发现了一个民宅。里面住了一个老奶奶和两个女儿。因为是山里没有啥娱乐活动,晚上他们决定做爱做的事情。为了保证公平他们约定每人每次10下,依次循环。二女儿最小最先来,1,2,3。。10很快就结束了。大女儿成熟一些她很快发现了诀窍1….2….3……..10。到了老奶奶的时候1,2,3,4,2,2,3,4,3,2,3,4再来一次。。。

    从此,我似乎明白了一些什么。

    我将此神技命名为《3234再来一次原则》,并将此原则贯彻我所有文章的始末,无私奉献给大家。后面开始会有越来越多的代码段,这些代码段大神们看一遍都能记住,我每次都需要打开官方的Api复制粘贴一遍。使用特别多的代码段我一般都用此原则反复输入一直到我记住为止。

    这里是官方的Fragments,在本例子中只取了2小段代码段。本书的作者非常准确的选取了最小量的可重用代码。

    http://developer.android.com/guide/components/fragments.html

    如果是初学者强烈不建议现在观看,因为会进入无限链接的循环之中,而且收效甚微。当熟悉到一定程度以后,在去看官方的文档,这个时候你就会思考,我以前看的XX傻缺的文章写的真烂。这个时候才是真正有收获的时候。

    本章目标:

    • 开发一个名为CriminalIntent应用
    • Fragment的引入

    如果我现在开始依照前面几章的模式继续写下去,首先的问题就是中间开始看文章的人可能会不理解Android Studio的一些操作,还有那莫名其妙的Git代码。最重要的是,很多东西我自己也忘记了,有必要在来一次。

    我会把所有的操作在详细的记录一次。所有的《3234再来一次原则》的内容是可以忽略的。

    ->《3234再来一次原则》

    现在要做的事情,就是把以前的重复流程在用一次。

    1. 创建CriminalIntent应用。
    2. 为CriminalIntent创建新的仓库。

    创建CriminalIntent应用

    在这里选择Start a new Android Studio project

    在Configure your new project界面里

    Application name: CriminalIntent

    Company Domain: lijing.example.com

    Project location: E:AndroidexampleCriminalIntent

    点击Next

    在Select the form factors you app weill run on界面里,是的,没有Target SDK,也没有Compile SDK。本来想任性选4.4,但是为了尽量跟本书靠拢我选了4.2。点击Next。

    在后面的内容中我们需要做一次练习用来手动添加Fragment。所以这里,依然选择Blank Activity。点击Next。

    在Creates a new blank activity with an action bar.界面里

    Activity Name: CriminalActivity

    Layout Name: activity_crime

    其他默认。单击Finish。

    为CriminalActivity创建新的仓库

    E:AndroidexampleCriminalIntent是我们存放这个应用的位置。在这一级别目录的目录浏览器里,右键->Git Bash

    会直接进入Git的工作目录

    关于安装和下载Git客户端的行为可以参看如下:

    http://www.cnblogs.com/canglin/p/4331116.html

    具体的流程我们在走一遍

    1. 初始化仓库
    2. 添加源代码
    3. 提交到本地库
    4. 创建远程的数据仓库
    5. 提交远程仓库

    初始化仓库

    在没有初始化以前使用 $git init 会得到一个提示Initialized empty Git repository in ….

    $git init

    $git status

    就会得到上图红色文件需要提交

    添加源代码

    因为Android Studio 会自动添加.getignore所以,这步我们能省则省。

    $git add .

    提交到本地仓库

    $git commit –m "ini CriminalIntent"

    $git status

    完成

    创建远程的数据仓库

    可以得到https://git.oschina.net/canglin/CriminalIntent.git

    添加远程仓库

    $git remote add CriminalIntent https://git.oschina.net/canglin/CriminalIntent.git

    $git remote –v

    注意:可以使用git remote remove CriminalIntent移除掉这个

    提交代码到远程仓库

    因为是不一样的代码是不能直接提交的需要先pull

    $git pull CriminalIntent master

    $git push CriminalIntent master

    然后中间会提示输入账号密码,就可以输入了。

    至此所有的代码已经添加完成,现在我们可以查看代码了

    http://git.oschina.net/canglin/CriminalIntent/commit/e33f6f591523294563911a862e89eb3d9e649435

    0e20f9824做了一次合并操作。

    ->《3234再来一次原则》 结束

    后面接着开始继续后面的目标,编写我们的第二个示例应用。从第二个例子开始,作者引入了fragment。对于为什么要引入这个fragment,作者给出了一个很任性的理由《总是使用fragment原则》。Fragment当然是极好的,简单的理解可以是它可以作为界面的一部分存在,甚至Activity的界面完全可以由不同的Fragment组成。Fragment有自己的生命周期,能处理事件。我们还可以动态的添加、替换和移除某个Fragment。

    这个例子就是在一个容器视图里面动态的添加了一个Fragment。这个Fragment只是一个简单的Edit控件。不考虑生命周期,不考虑各种插入方式,不考虑显示效果。只是存粹的演示动态的插入一个Fragment。

    首先将CrimeActivity 由Activity扩展,改为由FragmentActivity。系统会自动import android.support.v4.app.FragmentActivity;

    然后删除掉onCreateOptionsMenu()

    创建一个新类Crime拥有2个字段

    private UUID mId;

    private String mTitle;

    快键Alt+Insert 选择Getter and Setter 选择mTitle,他会自动生成mTitler的Getter和Setter。

    快键Alt+Insert 选择Getter 选择mId,他会生成mId的Getter。

    快键Alt+Insert 选择Constructor

    代码如下:

    http://git.oschina.net/canglin/CriminalIntent/commit/77fa667a17d200d491dd29bf0a59ee98a1f8503c

    这次的代码出了问题,我在创建项目的时候可能点错了东西

    事实上我创建的项目CriminalActivity是扩展至ActionBarActivity,而不是上个例子的Activity,在第8行。我修改为了FragmentActivity。这些都是无关紧要的。

    定义容器视图

    容器视图也就是放Fragment的layout文件,这个应用里它在res/layout/activity_crime.xml

    这个视图里就一个FrameLayout,后面讲编写fragment视图放置到这个FrameLayout里。

    接下来就要定义要放进去的东西。创建一个fragment,你必须创建一个Fragment的子类,这个子类是类似Activity的。它包含onCrate(),onStart(),onPause(),onStop()。我在在这里只实现onCreate()和 onCreateView()就足够了。

    定义CrimeFragment的布局 res/layout/fragment_crime.xml

    在res/layout上面右键New->Layout resource file

    File name:fragment_crime

    Root element填写为LinearLayout后就不需要在修改了,不改的话进去后做相应的修改。

    点击ok 在加入一个EditText。Fragment视图的布局文件Fragment_crime.xml就编写好了。

    创建CrimeFragment的类

    在java/com.example.lijing.criminalintent下点击右键New->Java Class ,类名为CrimeFragment。

    CrimeFragment 扩展自Fragment。在Fragment上Alt+Enter。我默认的import android.app.Fragment;好吧不管它,先就这样写着。这个Fragment是跟书上介绍的是不同的,书上在后面才介绍android.app.Fragment我这里只是提前了而已。

    代码如下:

    http://git.oschina.net/canglin/CriminalIntent/commit/1d37164857886bd8da968c89fac42bbeb82f02b4

    CrimeFragment类需要重写2个方法

    onCreate()和onCreateView()。这2个方法必须是public的,因为需要被任何activity调用。

    在Fragment里的View会有一些不同,但是上段代码可以做为作者的小技巧。每次使用View的时候就这么写。

    http://git.oschina.net/canglin/CriminalIntent/commit/bf706d8ad27710b1783d6c39c02c9b47eae053ad

    至此要添加的Fragment也做好了,然后我们在将新增CrimeFragment视图添加进去。添加UI fragment到FragmentManager。

    在添加的过程中涉及到的FragmentManager、FragmentTransaction在本例中都不做详细的描述。因为已经最细化了,现阶段要做的就是记住就可以了。

    《3234再来一次原则》 –值得反复输入背诵的代码

    与Activity交互的代码段

    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle saveInstanceState) {

    View v = inflater.inflate(R.layout.fragment_crime, parent, false);

    return v;

    }

    FragmentTransaction相关代码段

    FragmentManager fm = getSupportFragmentManager();

    Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);

    if (fragment == null) {

    fragment = new CrimeFragment();

    fm.beginTransaction()

    .add(R.id.fragmentContainer, fragment)

    .commit();

    }

    插入代码如下:

    http://git.oschina.net/canglin/CriminalIntent/commit/94fcabfbf735017c480242a8d49db0a3c92d0c39

    小结:

    本章主要展示了如何创建和动态插入一个Fragment。同时回顾了一下Git的用法。我们没有进一步的讨论更深入的话题,这些将在下一篇文章中介绍。本章就是看看怎么用。本章的正常阅读方法还是结合文章然后打开文章各个阶段的Git代码段。在对比文章看看哪些代码发生了改变。在Git中都非常详细的做出了描述,这些描述精确到了每一个字符。

    新技巧:

    本章根据书中的例子,删除了strings.xml中menu相关的字符串,在编译的时候会报错。具体操作可以在Git的代码列表中发现。我们在例子中可能要注释掉menu 相关的代码,并且删除掉app/src/main/res/menu/menu_criminalIntent.xml。因为是在项目里删除的所以我们在git里就要多做一次操作如图:

    指令为:

    $git rm app/src/main/res/menu/menu_criminal.xml

    ……

    文件的路径要打全,否则会显示找不到这个文件。

  • 相关阅读:
    SpringData JPA 使用原生 SQL
    解决:CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
    Java 正则表达式 简单用法
    Java文件I/O简单介绍
    理清 UT、UTC、GMT和CST
    【LeetCode】面试题62. 圆圈中最后剩下的数字
    【阅读笔记】Java核心技术卷一 #6.Chapter8
    【阅读笔记】Java核心技术卷一 #5.Chapter7
    【阅读笔记】Java核心技术卷一 #4.Chapter6
    SQL面试题
  • 原文地址:https://www.cnblogs.com/canglin/p/4364952.html
Copyright © 2020-2023  润新知