文章目录

    • 3.1 Activity的创建
    • 3.2 Activity的生命周期
    • 3.3 Activity的启动模式
      • 3.3.1 Android中的任务栈
      • 3.3.2 Activity的四种启动模式
    • 3.4 Activity之间的跳转
      • 3.4.1 显式意图
      • 3.4.2 隐式意图
      • 3.4.2 实战演练——打开浏览器
    • 3.5 Activity中的数据传递
      • 3.5.1 数据传递
      • 3.5.2 实战演练——注册用户信息
      • 3.5.3 数据回传
      • 3.5.4 实战演练——选择宝宝装备
    • 3.6 本章小结
  • 【学习笔记】
  • 【学习资料】

3.1 Activity的创建

1)包名处点击右键选择【New】【Activity】【Empty Activity】选项,填写Activity信息,完成创建。

3.2 Activity的生命周期

3.3 Activity的启动模式

3.3.1 Android中的任务栈

栈是一种“先进后出”的数据结构。Android中,采用任务栈的形式来管理Activity。

3.3.2 Activity的四种启动模式

standard模式是Activity的默认启动方式,每启动一个Activity就会在栈顶创建一个新的实例。

1.standard模式

2.singleTop模式

  • singleTop模式会判断要启动的Activity实例是否位于栈顶,如果位于栈顶则直接复用,否则创建新的实例。

  • singleTask模式下每次启动该Activity时,系统首先会检查栈中是否存在当前Activity实例,如果存在则直接使用,并把当前Activity之上的所有实例全部出栈。

3.singleInstance模式

singleInstance模式会启动一个新的任务栈来管理Activity实例,无论从哪个任务栈中启动该Activity,该实例在整个系统中只有一个。

3.4 Activity之间的跳转

  • Intent被称为意图,是程序中各组件进行交互的一种重要方式,它不仅可以指定当前组件要执行的动作,还可以在不同组件之间进行数据传递。
  • 一般用于启动Activity、Service以及发送广播等。根据开启目标组件的方式不同,Intent被分为两种类型显示意图和隐式意图。

3.4.1 显式意图

3.4.2 隐式意图

清单文件?

3.4.2 实战演练——打开浏览器

java文件:源代码\chapter03\OpenBrowser\app\src\main\java\cn\itcast

package cn.itcast.openbrowser;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button = (Button) findViewById(R.id.main_button);Intent intent = getIntent();String data  = intent.getStringExtra("extra_data");button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent();//设置动作为android.intent.action.VIEWintent.setAction("android.intent.action.VIEW");//设置要打开的网址intent.setData(Uri.parse("http://www.baidu.com"));startActivity(intent);}});}
}

视图文件:\源代码\chapter03\OpenBrowser\app\src\main\res\activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/openbrowser"tools:context=".MainActivity"><Buttonandroid:id="@+id/main_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentStart="true"android:layout_alignParentTop="true"android:layout_marginLeft="20dp"android:layout_marginStart="20dp"android:layout_marginTop="30dp"android:background="@drawable/click"/>
</RelativeLayout>
h

源代码\chapter03\OpenBrowser\app\src\main\AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="cn.itcast.openbrowser" ><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme" ><activity android:name=".MainActivity" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

15 LAUNCHER <一打开就要发送/>

3.5 Activity中的数据传递

3.5.1 数据传递

  • Activity之间传递数据需要用到Intent提供的putExtra()方法。

3.5.2 实战演练——注册用户信息

3.5.3 数据回传

3.5.4 实战演练——选择宝宝装备

附代码,讲解待补充

布局文件 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/loading"tools:context=".MainActivity"><ImageViewandroid:id="@+id/iv_head"android:layout_width="50dp"android:layout_height="50dp"android:layout_centerHorizontal="true"android:layout_marginTop="100dp"android:src="@drawable/head"/><LinearLayoutandroid:id="@+id/layout"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/iv_head"android:layout_margin="10dp"android:orientation="vertical"><RelativeLayoutandroid:id="@+id/regist_username"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"><TextViewandroid:id="@+id/tv_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:text="用户名:"android:textSize="20sp"/><EditTextandroid:id="@+id/et_name"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:layout_toRightOf="@id/tv_name"android:hint="请输入用户名"android:textSize="16sp"/></RelativeLayout><RelativeLayoutandroid:id="@+id/regist_password"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"><TextViewandroid:id="@+id/tv_psw"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:text="密    码:"android:textSize="20sp"/><EditTextandroid:id="@+id/et_password"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:layout_toRightOf="@id/tv_psw"android:hint="请输入密码"android:inputType="textPassword"android:textSize="16sp"/></RelativeLayout></LinearLayout><Buttonandroid:id="@+id/btn_send"android:layout_width="160dp"android:layout_height="48dp"android:layout_below="@id/layout"android:layout_centerHorizontal="true"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:background="@drawable/start"android:text="注册"android:textColor="#FFFFFF"android:textSize="20sp"android:textStyle="bold"/>
</RelativeLayout>

activity_shop.xml 多的代码是宝宝装备案例用

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutandroid:id="@+id/rl"xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/loading"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="#307f7f7f"android:gravity="center_vertical"android:orientation="horizontal"android:padding="5dp"><ImageViewandroid:layout_width="30dp"android:layout_height="30dp"android:background="@android:drawable/ic_menu_info_details"/><TextViewandroid:id="@+id/tv_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="20dp"android:text="商品名称"/><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="40dp"android:orientation="vertical"><TextViewandroid:id="@+id/tv_life"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="生命值"android:textSize="13sp"/><TextViewandroid:id="@+id/tv_attack"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="攻击力"android:textSize="13sp"/><TextViewandroid:id="@+id/tv_speed"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="速度"android:textSize="13sp"/></LinearLayout></LinearLayout>
</RelativeLayout>

java文件:MainActivity.java

package cn.itcast.userregist;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {private EditText et_password;private Button btn_send;private EditText et_name;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_name = (EditText) findViewById(R.id.et_name);et_password = (EditText) findViewById(R.id.et_password);btn_send = (Button) findViewById(R.id.btn_send);//点击开始游戏按钮进行数据传递btn_send.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {passDate();}});}//传递数据public void passDate() {//创建Intent对象,启动Activity02Intent intent = new Intent(this, ShowActivity.class);//将数据存入Intent对象intent.putExtra("name", et_name.getText().toString().trim());intent.putExtra("password", et_password.getText().toString().trim());startActivity(intent);}
}

\源代码\chapter03\UserRegist\app\src\main\java\cn\itcast\userregist\ShowActivity.java

package cn.itcast.userregist;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;public class ShowActivity extends AppCompatActivity {private ProgressBar mProgressBar1;private ProgressBar mProgressBar2;private ProgressBar mProgressBar3;private TextView mLifeTV;private TextView mAttackTV;private TextView mSpeedTV;private TextView tv_name;private TextView tv_password;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_show);//获取Intent对象(隐式意图)Intent intent = getIntent();//取出key对应的value值String name = intent.getStringExtra("name");String password = intent.getStringExtra("password");tv_name = (TextView) findViewById(R.id.tv_name);tv_password = (TextView) findViewById(R.id.tv_password);tv_name.setText("用户名:" + name);tv_password.setText("密    码:" + password);//下面是数据围传例子的相关代码mLifeTV = (TextView) findViewById(R.id.tv_life_progress);mAttackTV = (TextView) findViewById(R.id.tv_attack_progress);mSpeedTV = (TextView) findViewById(R.id.tv_speed_progress);initProgress();                    //初始化进度条}private void initProgress() {mProgressBar1 = (ProgressBar) findViewById(R.id.progressBar1);mProgressBar2 = (ProgressBar) findViewById(R.id.progressBar2);mProgressBar3 = (ProgressBar) findViewById(R.id.progressBar3);mProgressBar1.setMax(1000);        //设置最大值1000mProgressBar2.setMax(1000);mProgressBar3.setMax(1000);}// 开启新的activity并获取他的返回值public void click(View view) {Intent intent = new Intent(this, ShopActivity.class);startActivityForResult(intent, 1); // 返回请求结果,请求码为1}@Overrideprotected void onActivityResult(int requestCode,int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (data != null) {// 判断结果码是否等于1,等于1为宝宝添加装备if (resultCode == 1) {if (requestCode == 1) {ItemInfo info =(ItemInfo) data.getSerializableExtra("equipment");//更新ProgressBar的值updateProgress(info);}}}}//更新ProgressBar的值private void updateProgress(ItemInfo info) {int progress1 = mProgressBar1.getProgress();int progress2 = mProgressBar2.getProgress();int progress3 = mProgressBar3.getProgress();mProgressBar1.setProgress(progress1 + info.getLife());mProgressBar2.setProgress(progress2 + info.getAcctack());mProgressBar3.setProgress(progress3 + info.getSpeed());mLifeTV.setText(mProgressBar1.getProgress() + "");mAttackTV.setText(mProgressBar2.getProgress() + "");mSpeedTV.setText(mProgressBar3.getProgress() + "");}
}

清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="cn.itcast.userregist" ><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme" ><activity android:name=".MainActivity" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".ShowActivity" ></activity><activity android:name=".ShopActivity" ></activity></application></manifest>

\源代码\chapter03\UserRegist\app\src\main\java\cn\itcast\userregist*ShopActivity*.java

package cn.itcast.userregist;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
public class ShopActivity extends AppCompatActivity implementsView.OnClickListener {private ItemInfo itemInfo;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_shop);itemInfo = new ItemInfo("金剑", 100, 20, 20);findViewById(R.id.rl).setOnClickListener(this);TextView mLifeTV = (TextView) findViewById(R.id.tv_life);TextView mNameTV = (TextView) findViewById(R.id.tv_name);TextView mSpeedTV = (TextView) findViewById(R.id.tv_speed);TextView mAttackTV = (TextView) findViewById(R.id.tv_attack);mLifeTV.setText("生命值+" + itemInfo.getLife());mNameTV.setText(itemInfo.getName() + "");mSpeedTV.setText("敏捷度+" + itemInfo.getSpeed());mAttackTV.setText("攻击力+" + itemInfo.getAcctack());}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.rl:Intent intent = new Intent();intent.putExtra("equipment", itemInfo);setResult(1, intent);finish();break;}}
}

ItemInfo.java封装类

package cn.itcast.userregist;
import java.io.Serializable;
public class ItemInfo implements Serializable {private String name;private int acctack;private int life;private int speed;public ItemInfo(String name, int acctack, int life, int speed) {this.name = name;this.acctack = acctack;this.life = life;this.speed = speed;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAcctack() {return acctack;}public void setAcctack(int acctack) {this.acctack = acctack;}public int getLife() {return life;}public void setLife(int life) {this.life = life;}public int getSpeed() {return speed;}public void setSpeed(int speed) {this.speed = speed;}
}

3.6 本章小结

​ 本章主要讲解了Activity的相关知识,包括Activity入门、Activity生命周期、Activity启动模式、Intent的使用以及Activity中的数据传递,并在讲解各个知识点时编写了相应的使用案例。在应用程序中凡是有界面都会使用到Activity,因此,要求初学者必须熟练掌握该组件的使用。

【学习笔记】

  • Android Studio安装教程
  • 第1章 Android基础入门
  • 第2章 Android UI开发
  • 第3章 Activity
  • 第4章 数据存储

【学习资料】

  • 教材:《Android移动开发案例教程》
  • 学习资料:Android移动开发配套资料
    -1.源代码:每个章节配套案例代码
    -2.补充案例:项目、课后练习代码
    -3.课程资料:课后习题及答案、ppt
  • github:Android
    包含自己学习过程的全部案例、实验、项目代码
  • 推荐学习视频:Android开发从入门到精通(项目案例版)

Android移动开发基础案例教程 第3章 Activity相关推荐

  1. Android开发北漂 8 年,飘飘飘 飘够了。,android移动开发基础案例教程

    我推荐的学习思路: 学会记录未知 平时注意记录那些没听过,不了解的点,有链接的要记下链接,然后根据自己的理解分类,分出优先级,难易度,这样你时刻都能对自己有个清晰的认识,我们手头不会的有多少,会了对少 ...

  2. 以下未发布-Android的多线程以及异步消息处理机制,android移动开发基础案例教程源码

    1.Message: Message 是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间进行数据交换.除了 what 字段,还可以使用 arg1 和 arg2 来携带整型数据,使用 ...

  3. java基础案例教程前4章知识点_java学习记录4 Java基础知识点

    java学习记录4 Java基础知识点 1. 注释 单行注释 使用"//"开头,后面是注释的内容 一般在要注释的语句的上面加注释 多行注释 以"/*"开头,以& ...

  4. 计算机应用基础案例教程总结,计算机应用基础案例教程

    包杰军等编著的<计算机应用基础案例教程>以培养职业能力为目标,本着"做学合一"."理论与实践并行"."知识与技能并重"的教育思想 ...

  5. 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第二章:Android App 开发基础

    第 2 章 Android App开发基础 本章介绍基于Android系统的App开发常识,包括以下几个方面:App开发与其他软件开发有什么不一 样,App工程是怎样的组织结构又是怎样配置的,App开 ...

  6. android界面数据存储,Android应用开发基础之数据存储和界面展现(二)

    Android应用开发基础之数据存储和界面展现(二) 常见布局 相对布局 RelativeLayout 组件默认左对齐.顶部对齐 设置组件在指定组件的右边 android:layout_toRight ...

  7. 计算机应用基础案例教程答案,计算机应用基础案例教程问答题答案.doc

    <计算机应用基础案例教程>问答题答案 第一章 信息技术与计算机文化 1.计算机的发展经历了哪几个阶段?各阶段的主要特点是什么? 答:电子计算机的发展已经历了四个明显的阶段(也称为四代),正 ...

  8. 虚幻引擎虚拟现实开发基础学习教程

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.93 GB |时长:5h 15m 了 ...

  9. mysql核心数据库_从MySQL基础进军MySQL核心架构 178集MySQL数据库核心基础视频教程 MySQL基础案例教程...

    从MySQL基础进军MySQL核心架构 178集MySQL数据库核心基础视频教程 MySQL基础案例教程 课程目录 (1) 01MySQL基础_课程引入.avi (2) 02MySQL基础_为什么学习 ...

  10. android 启动服务同时传递数据,Android Studio开发基础之起动Service,并通过从Activity向Service传递数据...

    Android Studio开发基础之启动Service,并通过从Activity向Service传递数据 本实例演示启动Service,并通过从Activity向Service传递数据,新建一个Se ...

最新文章

  1. gcc:undefined reference to 'std::cout'
  2. SpringBoot - 实践阿里巴巴【Manager 层_通用业务处理层】
  3. Intel Realsense D435 多摄像头多线程目标识别架构
  4. JavaScript 中遍历对象的属性
  5. 旧调重弹-SetUnhandledExceptionFilter的使用问题
  6. 推荐系统遇上深度学习(一)--FM模型理论和实践
  7. 怎样把Image数据放入数据库
  8. 高通发布一系列新型WiFi芯片:兼容WiFi 6技术
  9. Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds. If the server requires
  10. ffdshow 源代码分析1 : 整体结构
  11. jquery中的ajax方法详解
  12. opencv的第一个lena图片显示
  13. Eclipse, Lomboz and Tomcat 的配置和调试
  14. netty权威指南 微云_《Netty权威指南》(二)NIO 入门
  15. 本地计算机的硬件基本配置信息,Windows7系统如何查看硬件的基本配置
  16. 年度最具特色生活类APP
  17. 基于ATtiny85制作MIDI数字音乐盒
  18. a boo peek_|音译|171120*歌词ΓRed Velvet - Peek-A-Boo
  19. 阿里龙蜥centos8.4 postgis 源码安装
  20. matlab不连续分段函数,分段函数画出的曲面不连续如何办?

热门文章

  1. position四个属性值的关系
  2. 记一次YUV图像分析(二)
  3. 初识Hibernate的主配置和映射配置
  4. java基础回顾(一)—— sleep和wait的区别
  5. 不要问我有多懒,写个脚本跑django
  6. winows8.1或winows7 64bit 安装Itunes 64bit 11.1.3 无法打开一直停止工作的解决办法
  7. IE8自动提交form的问题
  8. ubuntu9.10之grub.cfg详解
  9. springcloud架构特点_董事长挖来一位京东T9架构师,送我们两份微服务文档,实在太香了...
  10. pip慢?半分钟解决方案