首页 > 其他分享 >Android页面跳转与返回机制详解

Android页面跳转与返回机制详解

时间:2024-09-28 21:49:53浏览次数:1  
标签:返回 Fragment 跳转 详解 Intent Activity Android fragmentTransaction

在Android开发中,页面跳转是实现应用功能交互的重要手段之一。本文将从Activity之间的跳转、Activity与Fragment之间的跳转、Fragment之间的跳转以及页面返回的问题四个方面进行详细解析。

一、Activity之间的跳转

Activity是Android应用的基本构建块,代表了一个用户界面的单一屏幕。Activity之间的跳转主要通过Intent实现。

1. 基本跳转

基本的Activity跳转使用startActivity(Intent intent)方法。首先,需要创建一个Intent对象,并指定目标Activity的类。然后,调用startActivity()方法启动该Activity。示例代码如下:

Intent intent = new Intent(CurrentActivity.this, TargetActivity.class);
startActivity(intent);
2. 带参数的跳转

如果需要向目标Activity传递数据,可以在Intent中使用putExtra(String name, Object value)方法添加参数。在目标Activity中,通过getIntent().getExtras().get(String name)getIntent().getStringExtra(String name)等方法获取传递的数据。示例代码如下:

// 发送数据
Intent intent = new Intent(CurrentActivity.this, TargetActivity.class);
intent.putExtra("key", "value");
startActivity(intent);

// 接收数据
String value = getIntent().getStringExtra("key");
3. 返回数据

有时,需要从目标Activity返回数据给启动它的Activity。这可以通过startActivityForResult(Intent intent, int requestCode)方法启动目标Activity,并在目标Activity中调用setResult(int resultCode, Intent data)方法设置返回数据。启动Activity的Activity会收到onActivityResult(int requestCode, int resultCode, Intent data)回调,从而获取返回的数据。示例代码如下:

// 启动Activity并等待结果
Intent intent = new Intent(CurrentActivity.this, TargetActivity.class);
startActivityForResult(intent, 1);

// 在TargetActivity中设置返回数据
Intent returnIntent = new Intent();
returnIntent.putExtra("result_key", "result_value");
setResult(Activity.RESULT_OK, returnIntent);
finish();

// 接收返回数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1 && resultCode == Activity.RESULT_OK) {
        String result = data.getStringExtra("result_key");
    }
}

二、Activity与Fragment之间的跳转

1. Activity到Fragment的跳转

Activity中启动Fragment通常使用FragmentManagerFragmentTransaction。首先,获取FragmentManager的实例,然后开启一个事务(Transaction),通过add()replace()show()等方法添加或显示Fragment,最后提交事务。示例代码如下:

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, new TargetFragment());
fragmentTransaction.commit();
2. Fragment到Activity的跳转

Fragment中启动Activity与Activity中启动Activity的方式相同,都是使用Intent和startActivity()startActivityForResult()方法。由于Fragment没有自己的Context,因此需要使用宿主Activity的Context来创建Intent。示例代码如下:

Intent intent = new Intent(getActivity(), TargetActivity.class);
startActivity(intent);

三、Fragment之间的跳转

Fragment之间的跳转也是通过FragmentManager和FragmentTransaction实现的。与Activity到Fragment的跳转类似,但需要注意的是,Fragment之间的跳转通常发生在同一个Activity内部。示例代码如下:

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.hide(currentFragment);
fragmentTransaction.show(targetFragment);
fragmentTransaction.commit();

或者,如果需要完全替换Fragment,可以使用replace()方法:

FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, new TargetFragment());
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

四、页面返回的问题

在Android中,页面返回通常通过按下物理返回键或系统导航栏的返回按钮触发。Activity的onBackPressed()方法会在用户按下返回键时被调用,可以在此方法中实现页面返回的逻辑。

对于Fragment,如果需要在Fragment中处理返回事件,可以在宿主Activity的onBackPressed()方法中判断当前显示的Fragment,并据此执行相应的返回逻辑。另外,如果Fragment有自己的返回按钮,可以在按钮的点击事件中调用宿主Activity的onBackPressed()方法或执行其他返回逻辑。

总结来说,Android中的页面跳转和返回机制通过Intent、FragmentManager和FragmentTransaction等组件实现,为开发者提供了灵活多样的页面交互方式。掌握这些机制对于开发高质量的Android应用至关重要。

标签:返回,Fragment,跳转,详解,Intent,Activity,Android,fragmentTransaction
From: https://www.cnblogs.com/mdincn/p/18438485

相关文章

  • Android性能优化:getResources()与Binder交火导致的界面卡顿优化
    背景某轮测试发现,我们的设备运行一个第三方的App时,卡顿感非常明显:界面加载很慢,菊花转半天滑屏极度不跟手,目测观感帧率低于15对比机(竞品)也会稍微一点卡,但是好很多,基本不会有很大感觉的卡顿可以初步判定我们的设备存在性能问题,亟需优化,拉平到竞品水准。最后发现,这个问题实际......
  • 一文详解几种常见本地大模型个人知识库工具部署、微调及对比选型
    前言近年来,大模型在AI领域崭露头角,成为技术创新的重要驱动力。从AlphaGo的胜利到GPT系列的推出,大模型展现出了强大的语言生成、理解和多任务处理能力,预示着智能化转型的新阶段。然而,要将大模型的潜力转化为实际生产力,需要克服理论到实践的鸿沟,实现从实验室到现实世界的落地......
  • 【HTML|第1期】HTML5视频(Video)元素详解:从起源到应用
    日期:2024年9月9日作者:Commas签名:(ง•_•)ง积跬步以致千里,积小流以成江海……注释:如果您觉在这里插入代码片得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^-^1.01365=37.7834;0.99365=0.02551.02365=1377.4083;0.......
  • python 操作RabbitMq详解
    一、简介:RabbitMq 是实现了高级消息队列协议(AMQP)的开源消息代理中间件。消息队列是一种应用程序对应用程序的通行方式,应用程序通过写消息,将消息传递于队列,由另一应用程序读取完成通信。而作为中间件的RabbitMq无疑是目前最流行的消息队列之一。    RabbitMq......
  • Redis 集合类型详解及应用
    ......
  • Dijkstra算法详解【附算法代码与运行结果】
    算法背景Dijkstra算法是一种用于在加权图中找到单个源点到所有其他顶点的最短路径的算法。这种算法由荷兰计算机科学家艾兹格·戴克斯特拉(EdsgerW.Dijkstra)在1956年提出。它适用于有向图和无向图,并且图中的边权重必须是非负数。基本原理如下图所示,找到一条从v1(节点1)到v6(......
  • 9--苍穹外卖-SpringBoot项目中Redis的介绍及其使用实例 详解
    目录Redis入门Redis简介Redis服务启动与停止服务启动命令Redis数据类型5种常用数据类型介绍各种数据类型的特点Redis常用命令字符串操作命令哈希操作命令列表操作命令集合操作命令有序集合操作命令通用命令在java中操作RedisRedis的Java客户端SpringDataRe......
  • Android SDK工具(SDK Manager)下载与配置安装(测试环境搭建)
    文章目录一、前言二、下载三、SDKManager1.SDKTools2.SDKPlatformTools3.SDKBuildTools4.Adroid系统四.环境配置1.ANDROID_HOME设置2.Path配置3.验证配置一、前言在安卓开发和测试中,AndroidSDK起着关键作用。如今,AndroidStudio已将AndroidSDK合并......
  • 信号量的秘密:Python中的Semaphore详解
    引言随着计算机硬件的发展,多核处理器已经成为了标准配置。这使得开发人员可以利用并发编程技术来提高应用程序的性能。然而,在并发环境下,资源共享和访问控制成了一个棘手的问题。Semaphore(信号量)就是一种常用的解决此类问题的技术。通过限制对共享资源的同时访问数量,Semapho......
  • Mybatis详细教程 (万字详解)
    Mybatis3.5.14来自于B站‘天气预报’,一名宝藏up,跟着他可以培养起独立解决编程问题的能力!!!01.简介1.1官网官方中文网:MyBatis中文网中文网参考手册1.2概念MyBatis是一款优秀的持久层框架,支持自定义SQL,存储过程,高级映射官方解释必要前置技术Mys......