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

news2024/11/20 13:21:31

一、第一个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:
    }
}

结果:

在这里插入图片描述

参考

第一行代码,郭霖

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

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

相关文章

烟火AI识别检测算法在新能源汽车充电桩站点的应用方案

新能源汽车作为现代科技与环保理念的完美结合&#xff0c;其普及和应用本应带给人们更加便捷和绿色的出行体验。然而&#xff0c;近年来新能源汽车充电火灾事故的频发&#xff0c;无疑给这一领域投下了巨大的阴影。这不禁让人深思&#xff0c;为何这一先进的交通工具在充电过程…

思科网络中DHCP中继的配置

一、什么是DHCP中继&#xff1f;DHCP中继有什么用? &#xff08;1&#xff09;DHCP中继是指一种网络设备或服务&#xff0c;用于在不同的子网之间传递DHCP&#xff08;动态主机配置协议&#xff09;消息。DHCP中继的作用是帮助客户端设备获取IP地址和其他网络配置信息&#x…

运算放大器-放大倍数的表示方法:增益(Gain) 和 分贝(dB)

运算放大器的增益&#xff08;Gain&#xff09;可以用分贝&#xff08;dB&#xff09;表示&#xff0c;也可以用放大倍数表示。这两种表示方法之间的转换关系是基于对数的定义。 目录 1. 电压&#xff08;电流&#xff09;放大倍数分贝数定义&#xff1a; 2. 运放的增益&…

C语言文件操作相关题目

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

OPPO案例 | Alluxio在DataAI湖仓一体的实践

分享嘉宾&#xff1a; 付庆午-OPPO数据架构组大数据架构师 在OPPO的实际应用中&#xff0c;我们将自研的Shuttle与Alluxio完美结合&#xff0c;使得整个Shuttle Service的性能得到显著提升&#xff0c;基本上实现了性能翻倍的效果。通过这一优化&#xff0c;我们成功降低了约一…

阿里云2核4G服务器优惠价格30元、165元和199元1年,轻量和ECS

阿里云2核4G服务器租用优惠价格&#xff0c;轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图&#xff1a; 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…

Flutter学习10 - Json解析与Model使用

对于网络请求返回的 Json 数据&#xff0c;一般会进行如下解析&#xff1a; 将 Json String 解析为 Map<String, dynamic>将 Json String 解析为 Dart Model 发起一个返回 Json String 的网络请求 import package:http/http.dart as http;void main() {_doGet(); }_do…

mysql无法看到3306端口监听

参考:https://blog.csdn.net/shumeigang/article/details/103902459 mysql> show global variables like ‘port’; 是0 原因是我的my.cnf有话&#xff1a; skip-network 或 注释掉&#xff0c;然后重新启动下数据库&#xff0c;运行netstat -an|grep 3306 就可以看到了

基于springboot+vue的教学改革项目管理系统(源码+论文)

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

PHP+MySQL开发组合:智慧同城便民信息小程序源码系统 带完整的安装代码包以及安装部署教程

当前&#xff0c;城市生活的节奏日益加快&#xff0c;人们对各类便民信息的需求也愈发迫切。无论是寻找家政服务、二手交易&#xff0c;还是发布租房、求职信息&#xff0c;一个高效、便捷的信息平台显得尤为重要。传统的信息发布方式往往存在信息更新不及时、查找困难等问题&a…

在存在代理的主机上,为docker容器配置代理

1、配置Firefox的代理 (只配置域名或者ip&#xff0c;前面不加http://) 2、为容器中的Git配置代理 git config --global http.proxy http://qingteng:8080 3、Git下载时忽略证书校验 env GIT_SSL_NO_VERIFYtrue git clone https://github.com/nginx/nginx.git 4、docker的…

【问题记录】自定义Prometheus exporter收集数据,Prometheus显示收集到数据,grafana未显示数据出来

问题背景&#xff1a; 使用golang编写Prometheus exporter&#xff0c;获取指定API Url返回值中的data值&#xff0c;把它做为自定义指标。 1、exporter 500ms自动更新一次data值 2、Prometheus的Graph界面输入自定义指标可以查询到值的变化 3、自定义指标最小时间是ms级别&…

【C语言进阶篇】动态内存管理

【C语言进阶篇】动态内存管理 &#x1f308;个人主页&#xff1a;开敲 &#x1f525;所属专栏&#xff1a;C语言 &#x1f33c;文章目录&#x1f33c; 1. 为什么要有动态内存分配 2.动态内存开辟和释放函数 2.1 动态内存释放函数 2.1.1 free函数 2.2 动态内存开辟函数 2.2.1 …

prettier + eslint 配置

vue-cli 新建项目选择 ESLint Prettier 会自动下载相关包 settings.json {"editor.formatOnSave": true, // 开启保存文件自动格式化代码"editor.defaultFormatter": "esbenp.prettier-vscode", // 默认的代码格式化工具// "prettier.r…

二.寄存器

1. 2. 例如&#xff1a;h即为high&#xff08;高位&#xff09;&#xff0c;l即为low&#xff08;低位&#xff09; 3.一个字是两个字节 4.在写一条汇编指令或一个寄存器的名称时不区分大小写。 5.al&#xff0c;ah&#xff0c;ax在接受汇编指令时&#xff0c;并不相等&…

混合云构建-使用 Azure ExpressRoute 建立从本地到 Azure 虚拟网络的专用连接

如果有大量业务数据需要在本地数据中心和azure私有网络进行传输&#xff0c;同时保证带宽和时延的情况需要使用 ExpressRoute 设置从本地网络到 Azure 中的虚拟网络的专用连接。以下是实操步骤供参考&#xff1a; 一、创建和预配 ExpressRoute 线路 登录 Azure 门户。 在页面…

React系列 之 React进阶 含源码解读 (一)事件合成、state原理

资料来源&#xff1a;掘金课程 https://juejin.cn/book/6945998773818490884?enter_fromcourse_center&utm_sourcecourse_center 记录一些笔记 事件合成 React的事件其实是React重新实现的一套事件系统。目标是统一管理事件&#xff0c;提供一种跨浏览器一致性的事件处…

3、Jenkins持续集成-Jenkins安装和插件管理

文章目录 一、Jenkins安装1. 安装JDK2. 获取jenkins安装包3. 安装包上传到服务器&#xff0c;进行安装4. 修改Jenkins配置&#xff08;1&#xff09;低版本Jenkins的rpm包&#xff08;2&#xff09;高版本Jenkins的rpm包 5. 启动Jenkins6. 打开浏览器访问7. 获取并输入admin账户…

Linux文件 profile、bashrc、bash_profile区别

Linux系统中&#xff0c;有三种文件 出现的非常频繁&#xff0c;那就是 profile、bash_profile、bashrc 文件。 1、profile 作用 profile&#xff0c;路径&#xff1a;/etc/profile&#xff0c;用于设置系统级的环境变量和启动程序&#xff0c;在这个文件下配置会对所有用户…

pytest运行结果解析及其改造

简介&#xff1a;场景假设 - 当运行pytest完成后&#xff0c;需要针对运行的结果进行即时的反馈&#xff0c;打印 PASS 或者 FAIL&#xff0c;及其运行失败的原因&#xff0c;最后将结果推送给消息机器人。 历史攻略&#xff1a; pytestallure安装和使用 pytest&#xff1a;…