当前位置: 首页 > news >正文

【Android】Activity创建、显式和隐式跳转、清单文件声明

在这里插入图片描述

三三要成为安卓糕手

一:Activity的创建与声明

1:继承关系

默认重写onCreate,继承关系,最后的父类是Activity

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2:清单文件

manifest [ˈmænɪfest] 清单

包含MainActivity对应的xml布局文件和清单文件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

activity要被识别的话,需要先在清单文件中进行声明

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • .MainActivity是类名,“点”是相对路径

  • exported为true:允许.SecondActivty这个页面可以被其他页面所调用

  • 配置了 android.intent.action.MAIN android.intent.category.LAUNCHER Activity 才会作为应用的主入口 ,也就是点击应用图标最先启动的页面。

  • 如果有两个主入口,以当前清单写在上面的为准;一个工程中不建议写两个启动页

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3:创建文件注意点

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4:java文件声明成activity文件

其实很简单,创建.java类,继承AppCompatActivity类重写onCreate方法,定义一个xml布局,并关联;在清单文件中声明这个类就ok了

二:Activity间的跳转

1:按钮点击事情两种写法

定义一个按钮作为媒介

    <Buttonandroid:id="@+id/btn_second"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="跳转到Second页面"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"/>

(1)接口重写onClick

之前监听器的写法用的多一点,这次解锁新技能;实现View.OnClickListener接口,重写onClick方法,找到按钮控件传入this参数即可,这样写的好处,代码更简洁

public class MainActivity extends AppCompatActivity implements View.OnClickListener {}
Button btnStartSecond = findViewById(R.id.btn_second);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以这么勇的本质原因点击监听器是一个接口

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2:重写OnClick的好处

有多个按钮,代码的复用率就上去了

 <Buttonandroid:id="@+id/btn_second2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="跳转到Second2页面"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/btn_second"/>

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3:跳转到新的页面

		Button btnStartSecond = findViewById(R.id.btn_second);btnStartSecond.setOnClickListener(this);Button btnStartSecond2 = findViewById(R.id.btn_second2);btnStartSecond2.setOnClickListener(this);Log.i(TAG, "onCreate: btnStartSecond id = " + btnStartSecond.getId());Log.i(TAG, "onCreate: btnStartSecond2 id = " + btnStartSecond2.getId());
@Overridepublic void onClick(View v) {int id = v.getId();Log.i(TAG, "onClick: v id = " + id);if (id == R.id.btn_second) {Intent intent = new Intent(this, SecondActivity.class);startActivity(intent);} else if (id == R.id.btn_second2) {Intent intent = new Intent();intent.setAction("com.is.acbjp.SecondActivity");
//                intent.addCategory("android.intent.category.DEFAULT");intent.addCategory(Intent.CATEGORY_DEFAULT);startActivity(intent);}

注:OnClick方法中不建议使用switch语句,跟底层声明有关,建议我们使用if

(1)显示跳转

intent可以用来启动activity,翻译成意图

intent这玩意有点nb,是用来相互通信,相互传递一些信息的中介

			Intent intent = new Intent(this, SecondActivity.class);startActivity(intent);

(2)隐式跳转

			Intent intent = new Intent();intent.setAction("com.is.acbjp.SecondActivity");
//                intent.addCategory("android.intent.category.DEFAULT");intent.addCategory(Intent.CATEGORY_DEFAULT);//没有这句代码也无所谓,系统会自动添加的startActivity(intent);

需要再清单中进行声明;安卓中提供了一些隐式启动的类型,android.intent.category.DEFAULT表示默认,90%以上的需求用DEFAULT就可以了;EMAIL和MAPS也有在用

        <activityandroid:name="com.xlong.androidcomponentbyjavaproject.SecondActivity"android:exported="true"><intent-filter><action android:name="com.is.acbjp.SecondActivity"/><category android:name="android.intent.category.DEFAULT"/></intent-filter></activity>

intent-filter 意图过滤启动器

  • action中的name属性:一个自定义的字符串

  • category 英 [ˈkætəɡəri] 类别 中的name属性:默认即可

    • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  • 			//这两句代码等价intent.addCategory("android.intent.category.DEFAULT");intent.addCategory(Intent.CATEGORY_DEFAULT
    
    • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(3)流程分析

**btn_second2**按钮的点击事件

通过setAction("com.is.acbjp.SecondActivity")指定动作

配合addCategory(Intent.CATEGORY_DEFAULT)

系统会根据这两个条件去匹配AndroidManifest.xml中对应intent-filter的组件

这样就完成了使用了隐式跳转

(4)显示和隐式对比

对比项显式意图(Explicit Intent)隐式意图(Implicit Intent)
目标明确性明确指定组件类名(如SecondActivity.class不指定类名,通过动作 / 数据等描述需求
适用范围主要用于应用内部组件主要用于跨应用组件调用,或内部解耦
依赖配置不需要在AndroidManifest.xml中配置intent-filter必须在AndroidManifest.xml中配置intent-filter,否则无法被匹配
灵活性耦合度高(直接依赖类名)耦合度低(通过 “动作” 通信,不依赖具体类名)
http://www.dtcms.com/a/336062.html

相关文章:

  • Pytorch模型复现笔记-VGG讲解+架构搭建(可直接copy运行)+冒烟测试
  • MLArena:一款不错的AutoML工具介绍
  • 【股票数据API接口33】如何获取股票所属指数数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
  • PCA 实现多向量压缩:首个主成分的深层意义
  • JZ57 和为S的两个数字
  • Traefik网关DNS解析超时问题优化
  • Agent开发进阶路线:从基础响应到自主决策的架构演进
  • C++类型转换详解:从C风格到C++风格
  • 如何理解事件循环和JS的异步?
  • LintCode第137-克隆图
  • PostgreSQL导入mimic4
  • SQL详细语法教程(四)约束和多表查询
  • C语言相关简单数据结构:双向链表
  • Rust Async 异步编程(五):执行器和系统 I/O
  • Effective C++ 条款47: 使用traits classes表现类型信息
  • 基于强化学习的柔性机器人控制研究
  • 【大模型微调系列-07】Qwen3全参数微调实战
  • 关于虾的智能养殖系统的开发与实现(LW+源码+讲解+部署)
  • 【LeetCode题解】LeetCode 33. 搜索旋转排序数组
  • 详解flink java基础(一)
  • 嵌入式软件--->任务间通信
  • 【C++知识杂记1】智能指针及其分类
  • 05-实施任务控制
  • open Stack及VM虚拟机和其他平台虚拟机迁移至 VMware vSphere(esxi)虚拟化平台骨灰级后台磁盘替换法迁移方式
  • Maven依赖范围
  • C11期作业18(07.12)
  • 跨越南北的养老对话:为培养“银发中国”人才注入新动能
  • Linux——一些常用的其他命令
  • 学习Python中Selenium模块的基本用法(5:程序基本步骤)
  • MySQL数据库备份与恢复