【Android开发】【创建Activity,Activity之间的切换/消息传递】【java】

一、第一个Activity

1.1 创建一个空Activity

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 创建一个布局

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
知识点
在XML中引用一个id:@id/id_name
在XML中定义一个id:@+id/id_name

在这里插入图片描述
右键错误,点击Show Quick-Fixes,再点击弹出的Suppress:Add........,错误会被自动修复
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.3 在AndroidManifest.xml文件中注册

在这里插入图片描述
现在程序就可以运行了

1.4 在活动中使用Toast

Toast:显示短小的信息,起到提醒作用

在这里插入图片描述
(不必纠结此处代码的语法)

效果:
在这里插入图片描述

1.5 在活动中使用Menu

在这里插入图片描述
在这里插入图片描述

回到FirstActivity,重写onCreateOptionsMenu()方法【按下Ctrl+o,可生成部分代码】

在这里插入图片描述
在这里插入图片描述

此时菜单就可正常打开了
在这里插入图片描述

之后为菜单添加事件

在FirstActivity中重写onOptionsItemSelected()方法【操作方法同上】

@Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        if (item.getItemId() == R.id.add_item) {
            Toast.makeText(this,"你点击了add",Toast.LENGTH_SHORT).show();
        }else if(item.getItemId()==R.id.remove_item){
            Toast.makeText(this,"你点击了remove",Toast.LENGTH_SHORT).show();
        }
        return super.onOptionsItemSelected(item);
    }

效果如下:
在这里插入图片描述

1.6 销毁一个活动

  1. Android中的Back按键【就是返回键】
  2. Activity类中的finish()方法

第二种,把finish()方法写进button1中,之后点击button1,活动就会关闭

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        finish();//点击button1,活动就会关闭
    }
});

二、活动之间的切换(Intent)

Intent

  • 可以指明当前组件想执行的动作
  • 可以在不同组件之间传递数据

2.1 显式Intent

启动SecondActivity

新建一个名为SecondActivity的Activity

在这里插入图片描述

修改FirstActivity中button1的代码,使其能启动SecondActivity

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //启动SecondActivity
        Intent intent=new Intent(FirstActivity.this, SecondActivity.class);
        startActivity(intent);
    }
});

效果如下
在这里插入图片描述

2.2 隐式Intent

隐式Intent不知名我们要启动哪一个活动,系统分析这个Intent,之后帮我们找出合适的活动去启动。

  • 合适的活动:可以 响应 该隐式Intent的活动

注意

  • < action >和< category >同时匹配时,才可响应
  • 每个Intent只能指定一个action,却可以指定多个category

默认的category

修改SecondActivity的 < Activity >标签

在这里插入图片描述
修改FirstActivity中button1的代码,使其能启动SecondActivity

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //启动SecondActivity
        Intent intent=new Intent("com.example.noactivity.ACTTION_START");//不需要添加category,因为刚才xml中的是默认category
        startActivity(intent);
    }
});

之后启动,点击FirstActivity中button1,能启动SecondActivity

不用默认的category

修改SecondActivity的 < Activity >标签

在这里插入图片描述
修改FirstActivity中button1的代码,使其能启动SecondActivity

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //启动SecondActivity
        Intent intent=new Intent("com.example.noactivity.ACTTION_START");
        intent.addCategory("com.example.noactivity.MY_CATEGORY");//指定的category
        startActivity(intent);
    }
});

之后启动,点击FirstActivity中button1,能启动SecondActivity

2.2 隐式Intent【打开浏览器】

修改FirstActivity中button1的onClick()代码

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //指定了Intent的action是Intent.ACTION_VIEW
        Intent intent = new Intent(Intent.ACTION_VIEW);
        //用Uri.parse(),将网址解析为一个Uri对象。再调用Intent的setData()方法将该Uri对象传进去
        intent.setData(Uri.parse("http://www.baidu.com"));
        startActivity(intent);
    }
});

效果
在这里插入图片描述

2.3 隐式Intent【新建一个活动,使其能响应打开网站的Intent】

  • < intent-filter >中可再配置一个< data >标签,可以指定当前活动可以响应什么类型的数据
标签说明
android:scheme协议,如http
android:host主机名,如www.baidu.com
android:port端口,一般紧跟主机名之后
android:path主机名和端口之后的部分
android:mimeType指定可以处理的数据类型

创建活动,名为ThirdActivity,布局名为third_layout

third_layout.xml中添加button

<Button
        android:id="@+id/button_3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button 3"
        tools:ignore="MissingConstraints" />

修改AndroidManifest.xml中ThirdActivity的部分

 <activity
     android:name=".ThirdActivity"
     android:exported="true" >
     <intent-filter tools:ignore="AppLinkUrlError">
         <action android:name="android.intent.action.VIEW"/>
         <category android:name="android.intent.category.DEFAULT"/>
         <data android:scheme="http"/>
     </intent-filter>
 </activity>

此时ThirdActivity也可响应button1访问http://www.baidu.com的intent

2.4 隐式Intent【调用系统拨号页面】

修改button按键的onClick()方法。

主要看的是Intent 的action

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(Intent.ACTION_DIAL);
        intent.setData(Uri.parse("tel:10086")); //String转Uri,再通过setData()传入intent
        startActivity(intent);
    }
});

效果

在这里插入图片描述

2.5 向下一个活动传递数据

思路:把数据存放在intent中,启动另一个活动后,把这些数据从intent中取出即可

  • intent.putExtra()
  • getIntent()
  • intent.getStringExtra("extra_data")

在FirstActivity中启动SecondActivity

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String data = "Hello SecondActivity";//要发送的数据
        
        Intent intent = new Intent(FirstActivity.this, SecondActivity.class);//intent
        intent.putExtra("extra_data",data);//两个参数,(“键”,“要传递的数据”)
        startActivity(intent);
    }
});

在SecondActivity中取出数据,并打印出来

public class SecondActivity extends AppCompatActivity {
    private static final String TAG = "SecondActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_layout);

        Intent intent=getIntent();//获取intent
        String data=intent.getStringExtra("extra_data");//键
        Log.d(TAG, data);//在logcat中打印数据
    }
}

logcat中的数据

在这里插入图片描述

2.5 返回数据给上一个活动

  • startActivityForResult();:该方法期望在活动销毁时能够返回一个结果给上一个活动
  • putExtra()
  • setResult()
  • onActivityResult()

在FirstActivity中启动SecondActivity

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(FirstActivity.this, SecondActivity.class);//intent
        startActivityForResult(intent,1);//参数(intent,请求码)
    }
});

SecondActivity中button事件。点击后SecondActivity结束,返回数据(在intent中)

button2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent=new Intent();
        intent.putExtra("data_return","Hello FirstActivity");
        setResult(RESULT_OK,intent);//向上一个活动返回数据(数据在intent中)
        finish();//结束SecondActivity
    }
});

覆写FirstActivity中的onActivityResult()方法,以获取返回数据

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {//根据请求码,进入不同的分支
        case 1:
            if (resultCode == RESULT_OK) {
                String returnedData = data.getStringExtra("data_return");//根据键值,获取返回数据
                Log.d("FirstActivity", returnedData);
            }
            break;
        case 2:
            break;
        default:
    }
}

结果:

在这里插入图片描述

参考

第一行代码,郭霖

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

详细分析PyAutoGUI中的locate函数(附Demo)

目录 前言1. 基本知识2. 源代码分析3. Demo 前言 起因是实战中locate对个别定位会有偏差&#xff0c;导致一直识别错误 相应的基本知识推荐阅读&#xff1a;详细分析Python中的Pyautogui库&#xff08;附Demo&#xff09; 1. 基本知识 pyautogui.locate()函数用于在屏幕上定…

DBO优化朴素贝叶斯分类预测(matlab代码)

DBO-朴素贝叶斯分类预测matlab代码 蜣螂优化算法(Dung Beetle Optimizer, DBO)是一种新型的群智能优化算法&#xff0c;在2022年底提出&#xff0c;主要是受蜣螂的的滚球、跳舞、觅食、偷窃和繁殖行为的启发。 数据为Excel分类数据集数据。 数据集划分为训练集、验证集、测试…

YOLO-v8-seg实例分割使用

最近需要实例分割完成一些任务&#xff0c;一直用的SAM(segment anything&#xff09;速度慢&#xff0c;找一个轻量分割模型。 1. YOLO-v8-seg使用 git clone https://github.com/ultralytics/ultralytics.git cd ultralytics vim run.py from ultralytics import YOLO# L…

鸿蒙一次开发,多端部署(十三)功能开发的一多能力介绍

应用开发至少包含两部分工作&#xff1a; UI页面开发和底层功能开发&#xff08;部分需要联网的应用还会涉及服务端开发&#xff09;。前面章节介绍了如何解决页面适配的问题&#xff0c;本章节主要介绍应用如何解决设备系统能力差异的兼容问题。 系统能力 系统能力&#xff…

RK3568驱动指南|第十三篇 输入子系统-第143章 多对多的匹配关系分析

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

有哪些强大好用的AI表格数据处理工具或者 AI Excel工具?

在繁忙的工作和生活中&#xff0c;处理大量的表格数据往往令人感到头疼。面对一列列数字、一行行文字&#xff0c;我们需要花费大量的时间和精力去整理、核对。然而&#xff0c;随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术正逐渐改变这一现状。 如…

LLM 面试知识点——模型基础知识

1、主流架构 目前LLM(Large Language Model)主流结构包括三种范式,分别为Encoder-Decoder、Causal Decoder、Prefix Decode。对应的网络整体结构和Attention掩码如下图。 、 各自特点、优缺点如下: 1)Encoder-Decoder 结构特点:输入双向注意力,输出单向注意力。 代表…

Flutter开发进阶之瞧瞧RenderObject

Flutter开发进阶之瞧瞧RenderObject 通过上回我们了解到Flutter执行buildTree的逻辑线&#xff0c;当Tree构建完成后会交给Flutter底层的渲染事件循环去执行将内容渲染到屏幕的操作。 但是渲染的操作到底是如何串起来的呢&#xff1f;这篇文章将会从Element联系到RenderObject…

点餐小程序php毕设项目

主要技术框架&#xff1a; 主要功能模块&#xff1a; 商品管理 订单管理 用户管理 优惠券管理 商品分类管理 评论管理 轮播图管理 截图 获取源码 https://blog.lusz.top/article?article_id-2

【Linux系统编程(进程编程)】创建进程的场景,fork和vfork的使用及区别

文章目录 一、进程关键概念二、创建进程函数fork的使用一、进程创建实战 三、创建进程函数fork的使用补充四、进程创建发生了什么事&#xff1f;五、创建新进程的实际应用场景 & fork总结一、fork创建一个子进程的一般目的&#xff1f;二、fork编程实战 六、vfork也能创建进…

grid布局

文章目录 1. 概念2. 组成2.1. 网格行2.2. 网格列2.3. 网格间距2.4. 网格线2.5. 网格容器2.6. fr 单位 3. 网格跨行跨列3.1. 跨列3.2. 跨行 4. 网格布局案例4.1. 演示效果4.2. 分析思路4.3. 代码实现 1. 概念 网格是一组相交的水平线和垂直线&#xff0c;它定义了网格的列和行。…

【排序算法】实现快速排序值(霍尔法三指针法挖坑法优化随即选key中位数法小区间法非递归版本)

文章目录 &#x1f4dd;快速排序&#x1f320;霍尔法&#x1f309;三指针法&#x1f320;挖坑法✏️优化快速排序 &#x1f320;随机选key&#x1f309;三位数取中 &#x1f320;小区间选择走插入&#xff0c;可以减少90%左右的递归&#x1f309; 快速排序改非递归版本&#x1…

工业相机采图方式、图像格式(BYTE、HObject和Mat)转换

1、概述 机器视觉项目中&#xff0c;如何采集到合适的图像是项目的第一步&#xff0c;也是最重要的一步&#xff0c;直接关系到后面图像处理算法及最终执行的结果。所以采用不同的工业相机成像以及如何转换成图像处理库所需要的格式成为项目开发中首先要考虑的问题。 2、工业…

分布式组件 Nacos

1.在之前的文章写过的就不用重复写。 写一些没有写过的新东西 2.细节 2.1命名空间 &#xff1a; 配置隔离 默认&#xff1a; public &#xff08;默认命名空间&#xff09;:默认新增所有的配置都在public空间下 2.1.1 开发 、测试 、生产&#xff1a;有不同的配置文件 比如…

【ZYNQ】基于ZYNQ 7020的OPENCV源码交叉编译

目录 安装准备 检查编译器 安装OpenCV编译的依赖项 下载OpenCV源码 下载CMake 编译配置 编译器说明 参考链接 安装准备 使用的各个程序的版本内容如下&#xff1a; 类别 软件名称 软件版本 虚拟机 VMware VMware-workstation-full-15.5.0-14665864 操作系统 Ub…

【QT入门】 Qt实现自定义信号

往期回顾&#xff1a; 【QT入门】图片查看软件(优化)-CSDN博客 【QT入门】 lambda表达式(函数)详解-CSDN博客 【QT入门】 Qt槽函数五种常用写法介绍-CSDN博客 【QT入门】 Qt实现自定义信号 一、为什么需要自定义信号 比如说现在一个小需求&#xff0c;我们想要实现跨ui通信&a…

Hive入门

什么是hive&#xff1f; - Hive是Facebook开发并贡献给Hadoop开源社区的。它是建立在 Hadoop体系架构上的一层 SQL抽象&#xff0c;使得数据相关人 员使用他们最为熟悉的SQL语言就可以进行海量数据的处理、 分析和统计工作 - Hive将数据存储于HDFS的数据文件映射为一张数据库…

Java程序设计 4、5章 练习题

一、填空题 1.假设有 String s1 "Welcome to Java"; String s2 s1; String s3 new String("Welcome to Java"); 那么下面表达式的结果是什么&#xff1f; (1) s1 s2 ___________true_______________ (2) s1 s3 ______…

SOPHON算能服务器SDK环境配置和相关库安装

目录 1 SDK大包下载 2 安装libsophon 2.1 安装依赖 1.2 安装libsophon 2 安装 sophon-mw 参考文献&#xff1a; 1 SDK大包下载 首先需要根据之前的博客&#xff0c;下载SDK大包&#xff1a;SOPHON算能科技新版SDK环境配置以及C demo使用过程_sophon sdk yolo-CSDN博客 …