zoukankan      html  css  js  c++  java
  • 《Android编程权威指南》读书笔记(八) activity之间的交互

    《Android编程权威指南》-读书笔记(八)

    -activity之间的交互

    本章,将为GeoQuiz应用增加第二个activity。Activity控制着当前屏幕界面,新增加的activity将增加第二个用户界面。

    目标:

    • 从一个activity中启动另一个activity。
    • 在父activity(启动方)与子activity(被启动方)间进行数据传递。

    Activity的设计流程

    1. 设计界面
    2. 添加字符串资源
    3. 创建布局文件
    4. 创建activity子类
    5. 调用activity子类

    设计界面

    添加字符串

    <string name="cheat_button">Cheat!</string>

    <string name="warning_text">Are you sure you want to do this?</string>

    <string name="show_answer_button">Show Answer</string>

    <string name="judgment_toast">Cheating is wrong.</string>

    创建布局文件

    Res/layout 右键->New->Layout resource file

    组件定义图如下:

    预览图如下:

    创建新的activity子类

    在New操作里面是可以直接使用模板的

    为了进一步了解activity,直接创建一个java文件。

    在java->com.example.lijing.geoquiz上右键->New->Java Class

    创建完后直接在public class CheatActivity后面加入 extends Activity然后回车,Android Studio会自动import android.app.Activity。

    然后加入onCreate()

    首先还是输入@Override。这一步操作会自动帮我们校验重写的方法是不是会正确。如果在库中没有这个方法,那么在编译的时候会报错。在Android Studio中会直接给出提示信息。

    onCreate()的Bundle参数,在输入完Bundle后直接Alt+Enter导入Bundle的引用。Bundle的变量名称是可以随便写的,但是模板都是saveInstanceState那么我们就用这个。这个可以少很多不必要的麻烦。

    在onCreate()中加入

    super.onCreate(saveInstanceState);

    setContentView(R.layout.activity_cheat);

    至此,CheatActivity最简单的版本已经完成。代码如下:

    http://git.oschina.net/canglin/GeoQuiz/commit/66331f8aa6899cb83566c20756ecb31d37e744a0

    在manifest配置文件中申明activity

    所有的activity都必须在manifest配置文件中申明,这样操作系统才能够使用它们。如果使用向导来生成activity的话,这一步是可以省掉的。为了熟悉操作,书中要求我们采用最简单的java文件来创建了一个最简单的activity。那么我们就必须在manifest中自己手动来申明这个activity。

    <activity android:name=".CheatActivity" android:label="@string/app_name" />

    在application节点下面再增加一个activity节点,事实上name属性会自动提示出来并要求填写完成。在增加一个lablel。因为我们有限完成了strings.xml所有的属性都会自动提醒,按Enter或者Tab都能自动完成。

    代码如下:

    http://git.oschina.net/canglin/GeoQuiz/commit/23bb430229b50343e5d6f099c2cf1cf2d5948763

    调用activity子类

    首先在横向纵向2个布局文件中添加2个按钮,并且调整好位置。

    Layout-land/activity_quiz.xml 文件中的效果如下:

    Layout/activity_quiz.xml 文件中的效果如下:

    2个布局文件的代码分别如下:

    http://git.oschina.net/canglin/GeoQuiz/commit/f1d5a444c00066cff9a9a69a2f42494c44d73859

    调用一个activity实际上是操作系统直接调用的,在activity中使用startActivity()方法将调用请求发送给操作系统的ActivityManager。ActivityManager负责创建Activity实例并调用其onCreate()方法。

    2个activity的代码如下:

    http://git.oschina.net/canglin/GeoQuiz/commit/36bfa7933bcc07b9049c4fcfc4cce4fd42156cdc

    这个CheatActivity的功能实际上是,从QuizActivity中传送这个问题的答案到子activity中,然后在子 activity中点击按钮来显示答案。

    在代码中Extra数据的key为这个样子

    public static final String EXTRA_ANSWER_IS_TRUE = "com.example.lijing.geoquiz.answer_is_true";

    看起来特别的长,难道其他的应用中也可以调用Extra数据?

    我们使用startActivity(Intent Extra)来打开一个子activity,并且传送一个Intent Extra数据。

    在子类中我们通过getIntent().getBooleanExtra()来获取数据。

    如何从子activity中取回数据

    首先要用startActivityForResult()来打开一个要获取数据的activity。

    然后重写onActivityResult()来接受数据。

    最后使用setResult()来写入数据。

    在这个程序中我们要获取一个从子activity中返回的值,这个值就是我们有没有点击界面中的作弊按钮,然后在根据返回的结果这边显示有没有作弊。

    代码如下:

    http://git.oschina.net/canglin/GeoQuiz/commit/b6d609dbb3bc9bb789527cb4ed1007a940f0fdd8

  • 相关阅读:
    括号匹配性检测C语言实现
    预处理命令--宏定义
    *运算和&运算
    retain, copy, assign以及autorelease
    自定义 一个单例
    多米音乐笔试题
    UI-自定义视图、视图控制器
    Foundation框架—集合
    Foundation框架—字符串
    Foundation框架—结构体
  • 原文地址:https://www.cnblogs.com/canglin/p/4360906.html
Copyright © 2011-2022 走看看