Activity 之使用

本文内容
1. 使用 Activity 显式简单界面
2. Activity 之间的跳转
2.1 startActivity
2.3 startActivityForResult
3. Activity 之间的数据交互
4. Activity 的启动
4.1 显示启动
4.2 隐式启动
5. 启动系统中常见的 Activity
5.1 打开浏览器网页
5.2 打开相册
5.3 打开发送短信界面
5.4 打开拨号界面
6. 结束 Activity

1. 使用 Activity 显式简单界面

  • 创建一个 Activity 的子类 MainActivity ,继承 Activity
package com.zhangmiao.activityproject;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
  • 创建 MainActivity 的界面 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <TextView
android:id="@+id/main_activity_message_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:freezesText="true"
android:text="这是 MainActivity" />
</LinearLayout>
  • 在清单文件中声明 MainActivity
 <activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

2. Activity 之间的跳转

2.1 startActivity

  通过调用 startActivity() 方法可以启动其他 Activity,在 Intent 中指定想要启动的 Activity ,Intent 对象还可能携带少量数据传递给想要启动的 Activity。

  • 简单的 MainActivity 跳转 FirstActivity 界面

                  Intent firstIntent = new Intent(MainActivity.this, FirstActivity.class);
    //携带数据
    firstIntent.putExtra("from", "MainActivity");
    startActivity(firstIntent);

2.2 startActivityForResult

  有时,可能需要从启动的 Activity 获得结果。在这种情况下,就通过 startActivityForResult() 方法来启动 Activity ,被启动的 Activity 通过 setResult() 方法返回数据,启动的 Activity 通过 onActivityResult() 方法获取返回的数据。

  • 简单的 MainActivity 跳转 FirstActivity 界面,FirstActivity 返回数据给 MainActivity

    Intent firstIntent = new Intent(MainActivity.this, FirstActivity.class);
    firstIntent.putExtra("from", "MainActivity");
    startActivityForResult(firstIntent,10001);
  • FirstActivity 在合适的位置返回数据给 MainActivity

          Intent intent = new Intent();
    intent.putExtra("result","OK");
    setResult(20001,intent);
  • MainActivity 接收 FirstActivity 返回的数据

      @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 10001 && resultCode == 20001){
    if (data != null) {
    String result = data.getStringExtra("result");
    }
    }
    }

3. Activity 之间的数据交互

  可以使用 Intent 对象进行数据的传递。Intent 重载了很多 putExtra() 方法,包括了 Java 八大基本类型以及其数组类型等。

  • MainActivity 跳转 FirstActivity 界面,并传递 String 类型的数据
Intent firstIntent = new Intent(MainActivity.this, FirstActivity.class);
firstIntent.putExtra("from", "MainActivity");
startActivityForResult(firstIntent,10001);

  Intent 对象还有一个 putExtras(Bundle bundle) 方法,就是把需要传递的数据组合在一起进行传递。

  • MainActivity 跳转 FirstActivity 界面,使用 putExtras(Bundle bundle) 传递数据
Intent firstIntent = new Intent(MainActivity.this, FirstActivity.class);
Bundle bundle = new Bundle();
bundle.putString("from", "MainActivity");
bundle.putInt("count", 1);
firstIntent.putExtras(bundle);
startActivityForResult(firstIntent,10001);

4. Activity 的启动

4.1 显示启动

  显示启动的方式:

  1. 直接在 Intent 构造方法启动:

    Intent firstIntent = new Intent(MainActivity.this, FirstActivity.class);
  2. setComponent

    ComponentName componentName = new ComponentName(this,FirstActivity.class);
    Intent firstIntent = new Intent();
    firstIntent.setComponent(componentName);
    startActivity(firstIntent);
  3. setClass / setClassName

    Intent firstIntent = new Intent();
    firstIntent.setClass(this,FirstActivity.class);
    firstIntent.setClassName(this,"com.zhangmiao.activityproject.FirstActivity");
    startActivity(firstIntent);

4.2 隐式启动

  隐式启动就是要在该 Activity 中设置 IntentFilter 属性,只要启动的 Intent 匹配 IntentFilter 的条件就可以启动相应的 Activity 。

  对于想要作出响应的每一个 Intent 类型,必须加入相应的 < intent-filter >,其中包括一个 < action > 元素,还可选择性地包括一个 < category > 元素或一个 < data > 元素。这些元素指定 activity 可以响应的 Intent 类型。

  • 例如调用系统的相册

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent.setType("image/*");
    startActivity(intent);

5. 启动系统中常见的 Activity

  系统给我们提供了很多常用的 Activity,可以用来打开浏览器,打开发短信界面,打开相册界面,打开拨号界面等等。

5.1 打开浏览器网页

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);

5.2 打开相册

Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivity(intent);

5.3 打开发送短信界面

Intent intent = new Intent();
intent.setAction(Intent.ACTION_SNED);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT,"Hello World!");
startActivity(intent);

5.4 打开拨号界面

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("tel:110"));
startActivity(intent);

6. 结束 Activity

  可以通过调用 Activity 的 finish() 方法来结束 Activity 。还可以通过调用 finishActivity() 方法结束之前启动的另一个 Activity 。
  大多数情况下,不应该使用 finish() 或 finishActivity() 方法来结束 Activity 。Android 系统会管理 Activity 的生命周期,会在合适的时机结束 Activity 。调用结束 Activity 的方法可能对预期的用户体验产生不良影响,因此只应该在确实不想让用户返回此 Activity 实例时使用。

参考文章:

  1. Activity 必知必会
  2. Android之Activity系列总结(一)—Activity概览
  3. Android四大组件之Activity详解

Activity 之使用的更多相关文章

  1. EventBus实现activity跟fragment交互数据

    最近老是听到技术群里面有人提出需求,activity跟fragment交互数据,或者从一个activity跳转到另外一个activity的fragment,所以我给大家介绍一个开源项目,EventBu ...

  2. Android—Service与Activity的交互

    service-Android的四大组件之一.人称"后台服务"指其本身的运行并不依赖于用户可视的UI界面 实际开发中我们经常需要service和activity之间可以相互传递数据 ...

  3. Android:Activity+Fragment及它们之间的数据交换.

    Android:Activity+Fragment及它们之间的数据交换 关于Fragment与Fragment.Activity通信的四种方式 比较好一点的Activity+Fragment及它们之间 ...

  4. Android中Activity处理返回结果的实现方式

    大家在网上购物时都有这样一个体验,在确认订单选择收货人以及地址时,会跳转页面到我们存入网站内的所有收货信息(包含收货地址,收货人)的界面供我们选择,一旦我们点击其中某一条信息,则会自动跳转到订单提交界 ...

  5. 报错:You need to use a Theme.AppCompat theme (or descendant) with this activity.

    学习 Activity 生命周期时希望通过 Dialog 主题测试 onPause() 和 onStop() 的区别,点击按钮跳转 Activity 时报错: E/AndroidRuntime: FA ...

  6. Android 旋转屏幕--处理Activity与AsyncTask的最佳解决方案

    一.概述 运行时变更就是设备在运行时发生变化(例如屏幕旋转.键盘可用性及语言).发生这些变化,Android会重启Activity,这时就需要保存activity的状态及与activity相关的任务, ...

  7. Activity之概览屏幕(Overview Screen)

    概览屏幕 概览屏幕(也称为最新动态屏幕.最近任务列表或最近使用的应用)是一个系统级别 UI,其中列出了最近访问过的 Activity 和任务. 用户可以浏览该列表并选择要恢复的任务,也可以通过滑动清除 ...

  8. Android开发学习—— 创建项目时,不是继承activity,而是继承ActionBarActivity

    对于我们新建android项目时, 会 继承ActionBarActivity. 我们在新建项目时, 最小需求的sdk 选择 4.0以上版本.这样 新建的android项目就是继承activity了!

  9. Android中Fragment与Activity之间的交互(两种实现方式)

    (未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...

  10. Android中Activity的四大启动模式实验简述

    作为Android四大组件之一,Activity可以说是最基本也是最常见的组件,它提供了一个显示界面,从而实现与用户的交互,作为初学者,必须熟练掌握.今天我们就来通过实验演示,来帮助大家理解Activ ...

随机推荐

  1. JavaScript设计模式 Item 6 --单例模式Singleton

    单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池.全局缓存.浏览器的window对象.在js开发中,单例模式的 ...

  2. SublimeText 自带格式化代码功能

    其实sublime自身就有格式化命令,就不再安装插件,位置在[Preferences]->[Key Bindings]->[User]中,   中文版的位置在  [首选项]->[按键 ...

  3. MongoDB与python交互

    1.Pymongo PyMongo是Mongodb的Python接口开发包,是使用python和Mongodb的推荐方式.官方文档 2.安装 进入虚拟环境 sudo pip install pymon ...

  4. Pandas的函数应用、层级索引、统计计算

    1.Pandas的函数应用 1.apply 和 applymap 1. 可直接使用NumPy的函数 示例代码: # Numpy ufunc 函数 df = pd.DataFrame(np.random ...

  5. scala 访问阿里云oss

    我们的数据一天就一个T,数据量不断增大,集群磁盘有限,所以把冷数据放到了oss,偶尔会使用到冷数据,如果使用的时候还的从oss上拉数据这样很浪费时间后来想了个办法可以直接获取到oss上的数据.案例:o ...

  6. 关于MySQL死锁

    最近项目中遇到一个问题,使用Spring事务嵌套时,导致MySQL死锁.记录一下,时刻提醒自己. 场景如下, 事务嵌套, 最外层有默认事务, 嵌套一个独立事务, 独立事务和外部事务同时操作一张表.

  7. 【Unity游戏开发】浅谈Lua和C#中的闭包

    一.前言 目前在Unity游戏开发中,比较流行的两种语言就是Lua和C#.通常的做法是:C#做些核心的功能和接口供Lua调用,Lua主要做些UI模块和一些业务逻辑.这样既能在保持一定的游戏运行效率的同 ...

  8. java后台验证码工具

    jcaptcha和kaptcha是两个比较常用的图片验证码生成工具,功能强大.kaptcha是google公司制作,Jcaptcha是CAPTCHA里面的一个比较著名的项目. Shiro 结合 kca ...

  9. selenium IDE中log的保存与查看方法

    下载selenium IDE的log保存插件为File Logging(selenium IDE),下载安装方式如下: (1)打开firefox浏览器----点击右上角----附加组件---插件--- ...

  10. PyQt5嵌入matplotlib动画

    # -*- coding: utf-8 -*- import sys from PyQt5 import QtWidgets import numpy as np from matplotlib.ba ...