Android使用Intent隐式实现页面跳转
作者:流年若逝 发布时间:2022-09-17 05:33:48
在上一篇文章中我介绍了使用Intent显式来实现页面向下跳转,接下来这篇文章主要介绍的是使用Intent隐式来实现向上跳转,什么意思呢,就是当我们从第一个页面跳转到第二个页面的时候我们可以从第二个页面跳转回去.
通过查阅文档你会发现Activity中还有一个startActivityForResult()方法也是用于启动活动的,但是这个方法期望在活动销毁的时候能返回一个结果给上一个活动,毫无疑问这就是我们所要达到的效果.
startActivityForResult()方法接收2个参数,第一个参数还是Intent,第二个参数是请求码,用于回调中判断数据源的来源,我们可以在之前的代码中修改下如图
package com.example.testintent;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private Button bt;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt = (Button) findViewById(R.id.button1);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,FirstActivity.class);
startActivity(intent);
}
});
tv = (TextView) findViewById(R.id.text);
bt = (Button) findViewById(R.id.button2);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,FirstActivity.class);
/**
* 第一个参数是Intent对象
* 第二个参数是请求的一个标识
*/
startActivityForResult(intent,1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode){
case 1:
if(resultCode == RESULT_OK){
String returnData = data.getStringExtra("data_return");
tv.setText("返回到第一个界面");
Log.d("MainActivity",returnData);
}
break;
default:
break;
}
}
}
添加如下代码
Intent intent = new Intent(MainActivity.this,FirstActivity.class);
startActivityForResult(intent,1);
这里使用了startActivityForRresult()方法来启动MainActivity,请求码只要是一个唯一值就可以了,接下来我们在FirstActivity中添加 * 就可以
package com.example.testintent;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class FirstActivity extends AppCompatActivity {
private Button bt;
@Override
protected void onCreate( Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
bt = (Button) findViewById(R.id.button);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.putExtra("data_return","返回到第一个界面");
setResult(RESULT_OK,intent);
finish();
}
});
}
}
这里需要介绍几个知识点
Intent中提供了一系列putExtra()方法的重载,可以把我们想要的数据暂存在Intent中,在这里putExtra()接收了2个参数,第一个参数是键,第二个参数是是我们真正要传递的数据..
接下来在看setResult()这个方法接收2个参数,第一个参数用于向上一个活动处理结果,一般只是用RESULT_OK或者RESULT_CANCELED两个值,第二个参数则把带有数据的Intent传递回去,然后调用finish()方法来销毁当前活动.
由于我们使用的startActivityForResult()方法启动FIrstActivity的,所以我们需要在FIrstActivity被销毁之后回调上一个活动的onACtivityResult()方法,因此我们需要在MainActivity中写这个方法来得到返回的数据
package com.example.testintent;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private Button bt;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt = (Button) findViewById(R.id.button1);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,FirstActivity.class);
startActivity(intent);
}
});
tv = (TextView) findViewById(R.id.text);
bt = (Button) findViewById(R.id.button2);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,FirstActivity.class);
/**
* 第一个参数是Intent对象
* 第二个参数是请求的一个标识
*/
startActivityForResult(intent,1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode){
case 1:
if(resultCode == RESULT_OK){
String returnData = data.getStringExtra("data_return");
tv.setText("返回到第一个界面");
Log.d("MainActivity",returnData);
}
break;
default:
break;
}
}
}
也就是这个方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode){
case 1:
if(resultCode == RESULT_OK){
String returnData = data.getStringExtra("data_return");
tv.setText("返回到第一个界面");
Log.d("MainActivity",returnData);
}
break;
default:
break;
}
onActivityResult()方法带有三个参数,第一个参数requestCode即在我们启动活动的时候传入的请求码,第二个参数resultCode是我们返回数据时传入的处理结果,第三个参数data是我们返回数据的Intent
然后我们点击运行如图
点击第二个按钮
在点击一下
我们想要的结果就实现了。
来源:https://blog.csdn.net/wyf2017/article/details/81478887
猜你喜欢
- 多线程@Async的使用体验场景导入:可以将大批量的数据insert操作采用多线程的方式并行执行第三方服务的接口调用:由于存在个别第三方服务
- 本文实例为大家分享了Java实现win10计算器的具体代码,供大家参考,具体内容如下这个小demo是我上学时的远古代码(嘻嘻嘻),今天整理代
- C#控制台程序使用Log4net日志组件,供大家参考,具体内容如下1、Log4net一般都不陌生,但是在配置上不同类型的项目又不相同的地方比
- 本文为大家介绍了java.util.ArrayDeque类使用方法,供大家参考,具体内容如下1. ArrayDeque有两个类属性,head
- 前言最近在使用Spring框架时遇到了一些问题,主要是Spring的事务传播问题,一个不带事务的方法调用带事务的方法,有时候会出现不回滚的情
- java 设计模式之单例模式前言:在软件开发过程中常会有一些对象我们只需要一个,如:线程池(threadpool)、缓存(cac
- 昨天给各位总结了本人学习springboot整合mybatis第一阶段的一些学习心得和源码,主要就算是敲了一下SpringBoot的门儿,希
- 之前我在SpringBoot老鸟系列中专门花了大量的篇幅详细介绍如何集成Swagger,以及如何对Swagger进行扩展让其支持接口参数分组
- 前言本文主要给大家介绍了关于C#连接FTP时路径问题的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍:今天在开发项目时,需
- 在很多web产品中都需要实现在同一时刻,只能允许一个账号同时只能在一个浏览器当中登录。通俗点讲就是当A账号在浏览器1当中登录了,此时在浏览器
- 本文实例讲述了C#实现将DataTable内容输出到Excel表格的方法。分享给大家供大家参考。具体如下:1.关于本文本文描述了一个函数(S
- 本篇文章介绍SpringBoot的上传和下载功能。一、创建SpringBoot工程,添加依赖compile("org.spring
- 一直写过数组全排列的算法,当时接触的是使用回溯的方法,这样可以保证生成的全排列一定是按照字典序的,但是今天在做leetcode上的一道题时,
- 代码实例:<%@ page language="java" contentType="text/html
- 会话技术会话:一次会话中包含多次请求和响应。一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止功能:在一次会话的范围内
- 这个问题是我自己开发中遇到的问题 数据库使用的是mysql5.6 字段名称为checkingTime 类
- 1、心跳机制简介在分布式系统中,分布在不同主机上的节点需要检测其他节点的状态,如服务器节点需要检测从节点是否失效。为了检测对方节点的有效性,
- Springboot + Vue,定时任务调度的全套实现方案。这里用了quartz这个框架,实现分布式调度任务很不错,关于quarz的使用方
- 一、项目简述本系统主要实现的功能有: 学生以及老师的注册登录,在线考试,错题查询,学生管理,问题管理,错题管理,错题查询,分数查询,试卷管
- 什么是slf4jSLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务