使用意图intent构建一个多活动的Android应用

news2024/7/6 18:06:29

安卓意图Intent是Android应用组件(Activity、Service、Broadcast Receiver)之间进行交互的一种重要方式。Intent允许启动一个活动、启动一个服务、传递广播等。Intent使应用能够响应系统及其他应用的动作。Intent使用的主要目的有:
1、 启动Activity:可以启动自己应用内的Activity,也可以启动其他应用的Activity。例如,打电话、发短信、打开地图等。
2、 启动Service:启动后台Service来执行耗时任务。例如,播放音乐,网络下载文件等。
3、 发送和接收广播:发送广播到其他应用,或者接收系统和其他应用的广播。例如,电量变化、时间变化等广播。
4、 传递数据:通过Intent可以在Activity、Service、Broadcast Receiver之间传递数据。例如,从一个Activity传递数据到另一个Activity。
Android的四大组件(Activity、Service、Broadcast Receiver、Content Provider)都是通过Intent来互相通信的。所以Intent机制是Android应用组件之间的重要联系纽带,它使得Android应用变得松耦合、功能更加灵活,这也是Android应用框架的精髓所在。总之,学好Intent机制,知道如何通过Intent在各组件之间跳转传值,是开发Android应用的重要一环。熟练使用Intent可以让我们的应用具有更强的扩展性和交互性。

下面来借助intent实现一个多活动的Android意图:
活动是用户能完成的一个确定的事情。如果能把多个活动串在一起来完成某个复杂的工作,这称为一个任务。比如显示一个菜单就是一个活动,如果应用很简单,一个活动就足够了。很多情况下,用户不只是做一件事情,这就需要使用多个活动了,比如一个用来显示菜谱,一个用来增加菜谱。
下面来构建一个包含两个活动的应用,第一个活动允许输入一个消息,单击第一个活动中的按钮时,它会启动第二个活动,并传入这个消息。第二个活动再显示这个消息。
这个应用包含两个活动两个布局:
1、应用运行时,首先会启动活动CreateMessageActivity。
这个活动使用布局activity_create_message.xml。
2、用户单击CreateMessageActivity中的按钮,这回启动活动ReceiveMessageActivity。这个活动使用布局activity_receive_message.xml。
工程布局
创建工程
使用AS新建一个Android工程,应用名为My Messenger,公司域名为hfad.com。最低SDK为API19保证能在大多数设备上都能运行。需要创建一个CreateMessageActivity的空活动,相应布局名为activity_create_message。确保创建活动时不要选中Backwards Compatibility(AppCompat)选项。
activity_create_message.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns: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:padding="16dp"
    android:orientation="vertical"
    tools:context="com.hfad.mymessenger.CreateMessageActivity"
    >
    <EditText 
        android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:hint="@string/hint"
        android:ems="10"
        />
    <Button
        android:id="@+id/send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:onClick="onSendMessage"
        android:text="@string/send"
        />
</LinearLayout>

EditText元素定义了一个可编辑的文本域,用来输入文本。
hint属性为用户提供一个提示,指出应当在这个文本域键入什么文本。我们需要把它增加为一个字符串资源。
ems属性描述EditText该有多宽,其宽度足以容纳几个字母m

然后更新string.xml

<resources>
    <string name="app_name">My Messenger</string>
    <string name="send">Send Message</string>
    <string name="hint">Enter a message</string>
    <string name="chooser">Send message via...</string>
</resources>

打开CreateMessageActivity.java文件,把AS为你创建的代码替换为以下代码:

package com.hfad.mymessenger;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

//确保继承了Activity类
public class CreateMessageActivity extends Activity {
	@override
	//创建活动时会调用onCreate()方法
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_create_message);
	}
	
	//单击按钮时会调用这个方法
	public void onSendMessage(View view){
		//从ID为message的可编辑文本域得到文本
		EditText messageView = (EditText)findViewById(R.id.message);
		String messageText = messageView.getText().toString();
		//创建意图,指定了将要接收这个意图的活动。就像在信封上写地址一样。
		//第一个参数告诉Android这个意图来自哪个对象,可以用this表示当前对象
		//第二个参数是需要接收这个意图的那个活动的类名
		Intent intent = new Intent(this, ReceiveMessageActivity.class);
		//将这个文本增加到意图,指定名为message
		intent.putExtra(ReceiveMessageActivity.EXTRA_MESSAGE, messageText);
		//启动意图中指定的活动
		startActivity(intent);
	}
}

右击包名new一个activity,命名为ReceiveMessageActivity,布局命名为activity_receive_message,另外不要选中Launcher Activity和Backwards Compatibility。
到目前为止,我们已经创建了一个包含两个活动的应用,而且每个活动都有自己的布局,接下来要做的就是在用户单击Send Message按钮时让CreateMessageActivity调用ReceiveMessageActivity。要让活动启动另一个活动,需要使用一个意图intent。可以把intent看作是一个想要做某件事的意图,意图是一个消息类型

activity_receive_message.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns: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:padding="16dp"
    android:orientation="vertical"
    tools:context="com.hfad.mymessenger.ReceiveMessageActivity"
    >
    <TextView
        android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</LinearLayout>

ReceiveMessageActivity.java

package com.hfad.mymessenger;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class ReceiveMessageActivity extends Activity {
    public static final String EXTRA_MESSAGE = "message";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_receive_message);
        Intent intent = getIntent();
        String messageText = intent.getStringExtra(EXTRA_MESSAGE);
        TextView messageView = (TextView)findViewById(R.id.message);
        messageView.setText(messageText);
    }
}

GitHub:https://github.com/dogriffiths/HeadFirstAndroid2ndEdition/tree/master/chapter03/MyMessenger

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/489325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DDPM--生成扩散模型

DDPM–生成扩散模型 Github: https://github.com/daiyizheng/Deep-Learning-Ai/blob/master/AIGC/Diffusion.ipynb DDPM 是当前扩散模型的起点。在本文中&#xff0c;作者建议使用马尔可夫链模型&#xff0c;逐步向图像添加噪声。 函数 q ( x t ∣ x t − 1 ) q(x_t | x_t-1…

java获取真实ip的方法

在网络中&#xff0c;如果不想被人监听&#xff0c;那么就需要获取 IP地址了&#xff0c;在电脑中我们可以使用到 ip地址获取工具&#xff0c;那么如何在 Java中获取真实的 IP地址呢&#xff1f; 1、首先我们需要先准备一台电脑&#xff0c;然后将电脑进行联网&#xff1b; 2、…

ChatGPT带你一起了解C语言中的fseek()

fseek函数用于将文件指针移动到指定位置。它的原型如下&#xff1a; c int fseek(FILE *stream, long offset, int whence); 其中&#xff0c;stream是文件指针&#xff0c;offset是偏移量&#xff0c;whence是起始位置。 偏移量offset可以是正数、负数或零。 如果是正数&a…

Java --- springboot2数据响应与内容协商

目录 一、数据响应与内容协商 1.1、响应json 1.1.1、返回值解析器 1.1.2、springMVC支持的返回值类型 1.1.3、HttpMessageConverter原理 1.2、内容协商 1.2.1、引入依赖 1.2.2、 postman分别测试返回json和xml 1.2.3、开启浏览器参数方式内容协商功能 1.3、自定义 Message…

持续测试:DevOps时代质量保证的关键

在 DevOps 时代&#xff0c;持续测试已成为质量保证的一个重要方面。近年来&#xff0c;软件开发方法论发生了快速转变。随着 DevOps 的出现&#xff0c;已经发生了向自动化和持续集成与交付 (CI/CD) 的重大转变。传统的质量保证方法已不足以满足现代软件开发实践的需求。持续测…

Java——二叉树的深度

题目链接 牛客网在线oj题——二叉树的深度 题目描述 输入一棵二叉树&#xff0c;求该树的深度。从根结点到叶结点依次经过的结点&#xff08;含根、叶结点&#xff09;形成树的一条路径&#xff0c;最长路径的长度为树的深度&#xff0c;根节点的深度视为 1 。 数据范围&am…

记一次产线打印json导致的redis连接超时

服务在中午十一点上线后&#xff0c;服务每分钟发出三到四次redis连接超时告警。错误信息为&#xff1a; Dial err:dial tcp: lookup xxxxx: i/o timeout 排查过程 先是检查redis机器的情况&#xff0c;redis写入并发数较大&#xff0c;缓存中保留了一小时大概400w条数据。red…

java学习之第十章作业

目录 第一题 第二题 第三题 第四题 第五题 第六题 代码的问题点 第七题 第八题 第一题 package homework;public class HomeWork01 {public static void main(String[] args) {Car c new Car();//创建新对象&#xff0c;没有实参Car c1 new Car(100);//1.创建一个新的…

Windows11开启远程桌面和修改远程端口

该示例适用于大部分的Windows平台&#xff0c;示例基于Windows 11。操作系统&#xff1a;Windows 11 专业版。远程桌面默认使用TCP协议&#xff0c;默认端口为3389&#xff0c;修改后为13389。 一、开启远程桌面 控制面板-->系统与安全-->系统-->允许远程访问 二、修…

牛客网_华为机试题_HJ23 删除字符串中出现次数最少的字符

写在前面&#xff1a; 题目链接&#xff1a;牛客网_华为机试题_HJ23 删除字符串中出现次数最少的字符 编程语言&#xff1a;C 难易程度&#xff1a;简单 一、题目描述 描述 实现删除字符串中出现次数最少的字符&#xff0c;若出现次数最少的字符有多个&#xff0c;则把出现次数…

09 虚拟机配置-虚拟机描述

文章目录 09 虚拟机配置-虚拟机描述9.1 概述9.2 元素介绍9.3 配置示例 09 虚拟机配置-虚拟机描述 9.1 概述 本节介绍虚拟机domain根元素和虚拟机名称的配置。 9.2 元素介绍 domain&#xff1a;虚拟机XML配置文件的根元素&#xff0c;用于配置运行此虚拟机的hypervisor的类型…

英语中主语从句的概念及其用法,例句(不断更新)

主语从句的原理 主语从句是一种充当整个句子主语的从句&#xff0c;主语从句构成的句子&#xff0c;是要以引导词开头的。它可以用名词性从属连词、关系代词或关系副词引导。主语从句通常位于谓语动词之前&#xff0c;用于表示动作、状态或事件的主体。 以下是一些常用的引导主…

【Python习题集2】控制语句练习

控制语句 一、实验内容二、实验总结 一、实验内容 1.从键盘接收整数的一百分制成绩(0~100)&#xff0c;要求输出其对应的成绩等级A-E。其中&#xff0c;90分&#xff08;包含&#xff09;以上为A&#xff0c;80~89&#xff08;均包含&#xff09;分为B&#xff0c;70~79&#…

【Unity编辑器】拓展Hierarchy视图

目录 1、拓展菜单 2、拓展布局 3、重写菜单 1、拓展菜单 在Hierarchy视图中点击Create按钮&#xff0c;弹出的菜单My Create->Cube就是自定义拓展菜单 using UnityEngine; using UnityEditor;public class S2_拓展菜单 : MonoBehaviour {[MenuItem("GameObject/My …

Leetcode268. 丢失的数字

Every day a leetcode 题目来源&#xff1a;268. 丢失的数字 解法1&#xff1a;排序 代码&#xff1a; /** lc appleetcode.cn id268 langcpp** [268] 丢失的数字*/// lc codestart class Solution { public:int missingNumber(vector<int> &nums){int n nums.s…

分数傅里叶变换、小波变换和自适应神经网络

与普通的傅立叶变换&#xff0c;即 1 阶的分数阶傅立叶变换不同&#xff0c;分数阶傅立叶变换&#xff08;p ≠ 1&#xff09;提取的特征同时结合了原始图像的空间和频率特性。 分数傅里叶变换图像是介于原始图像和全傅里叶变换图像之间的东西。 Vander Lugt 相关器可以根据傅…

Playwright之初体验

参考文件 官方文档&#xff1a;https://playwright.dev/docs/intro GitHub链接&#xff1a;https://github.com/microsoft/playwright-python Playwright简介 Playwright Test是专门为满足端到端测试的需求而创建的。Playwright支持所有现代搜索引擎&#xff0c;包括Chrome、…

linux基础简介(一)

1.Linux内核 ​ Linux 系统从应用角度来看&#xff0c;分为内核空间和用户空间两个部分。内核空间是 Linux 操作系统的主要部分&#xff0c;但是仅有内核的操作系统是不能完成用户任务的。丰富并且功能强大的应用程序包是一个操作系统成功的必要件。 ​ Linux 的内核主要由 5…

Android Framework基础面试篇~

在Android应用开发面试中&#xff0c;针对Framework的问题是常被考察的。以下是一些常见的Framework金典面试题目及其详解&#xff1a; 1. 什么是Android应用生命周期&#xff1f;你能描述一下它包含哪几个阶段吗&#xff1f; Android应用生命周期指的是应用从启动到关闭的整…

[oeasy]python0048_注释_comment_设置默认编码格式

注释Comment 回忆上次内容 使用了版本控制 git 制作备份进行回滚 尝试了 嵌套的控制结构 层层 控制 不过 除非 到不得以尽量不要 太多层次的嵌套 这样 从顶到底含义 明确而且 还扁平 扁平 也能 含义明确 还可以 做点什么&#xff1f; 让程序含义 更加明确呢&#xff1f;&…