Android多个Activity之间的页面跳转带参传递与返回
Android 页面 多个 之间 返回 跳转 传递 Activity
2023-09-11 14:18:54 时间
一.普通页面跳转
Activity之间进行跳转需要使用Intent类 Intent 意图
第一个Activity
<Button
android:id="@+id/btn_open"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="开启新的Activity" />
<TextView
android:id="@+id/tv_first"
android:gravity="center"
android:text="第一个Activity"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
第二个Activity
<Button
android:id="@+id/btn_back"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="返回第一个Activity" />
<TextView
android:id="@+id/tv_second"
android:gravity="center"
android:text="第二个Activity"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
第一个Activity的按钮点击事件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
Button btn_open = (Button) findViewById(R.id.btn_open);
btn_open.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//建立一个意图,参数为(当前的Activity类对象,需要开的的Activity类)
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
//启动意图
startActivity(intent);
}
});
}
最后别忘记了在AndroidManifest.xml文件中注册Activity
<activity android:name=".SecondActivity" >
养成习惯,在每次创建新的Activity时,就及时去AndroidManifest.xml注册
二.Activity带参跳转
带参跳转则需要使用 Intent 的 putExtra(键,值)方法来放入参数,然后在第二个Activity中使用 getIntent().get类型Extra(键)来取得值
带参跳转则需要使用 Intent 的 putExtra(键,值)方法来放入参数,然后在第二个Activity中使用 getIntent().get类型Extra(键)来取得值
第一个Activity按钮的点击事件
只比前面多了一行代码 intent.putExtra("key", "我是参数");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
Button btn_open = (Button) findViewById(R.id.btn_open);
btn_open.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//建立一个意图,参数为(当前的Activity类对象,需要开的的Activity类)
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("key", "我是参数");
//启动意图
startActivity(intent);
}
});
}
第二个Activity中的java代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
TextView tv_second = (TextView) findViewById(R.id.tv_second);
// 得到Intent
Intent intent = getIntent();
// 通过key得到值 值为字符串类型
String value = intent.getStringExtra("key");
// 在TextView上设置 值
tv_second.setText(value);
}
三.带参传递的参数还可以是对象。
传递对象必须保证对象实现序列化
新建一个User类并实现序列化 Serializable
public class User implements Serializable{
/**
* 序列化id,建议加上,
*/
private static final long serialVersionUID = 1L;
// 用户名
private String username;
// 密码
private String password;
public User() {
}
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
第一个Activity中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
Button btn_open = (Button) findViewById(R.id.btn_open);
btn_open.setOnClickListener(new OnClickListener() {
// 得到User类,并赋值
User user = new User("账号", "密码");
@Override
public void onClick(View v) {
// 建立一个意图,参数为(当前的Activity类对象,需要开的的Activity类)
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
// 放入需要传递的对象
intent.putExtra("key", user);
// 启动意图
startActivity(intent);
}
});
}
第二个Activity中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
TextView tv_second = (TextView) findViewById(R.id.tv_second);
// 得到Intent
Intent intent = getIntent();
// 通过key得到得到对象
// getSerializableExtra得到序列化数据
User user = (User) intent.getSerializableExtra("key");
// 在TextView上设置 用户名和密码
tv_second.setText(user.getUsername() + " " + user.getPassword());
}
在传递对象的时候,重点是保证对象实现序列化 Serializable并使用getSerializableExtra得到序列化数据
四.Activity带参返回
启动新的Activity 使用startActivityForResult(intent,requestCode)
必须重写onActivityResult(request,result,data) 方法来获取返回数据启动
第一个Activity
public class FirstActivity extends Activity {
// 定义请求码,不同界面的跳转请求码要求不同,为了识别是哪个控件传递数据
private final static int sendUser = 1;
private TextView tv_first;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
Button btn_open = (Button) findViewById(R.id.btn_open);
tv_first = (TextView) findViewById(R.id.tv_first);
btn_open.setOnClickListener(new OnClickListener() {
// 得到User类,并赋值
User user = new User("账号", "密码");
@Override
public void onClick(View v) {
// 建立一个意图,参数为(当前的Activity类对象,需要开的的Activity类)
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
// 放入需要传递的对象
intent.putExtra("key", user);
// 启动意图(意图,请求码(int)) 请求码最好使用 final static定义 方便识别
startActivityForResult(intent, sendUser);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 如果请求码为 sendUser 返回码 为 RESULT_OK RESULT_OK为系统自定义的int值为 -1
if (requestCode == sendUser && resultCode == RESULT_OK) {
// 在TextView中设置返回信息
tv_first.setText(data.getStringExtra("key"));
}
}
}
第二个Activity
public class SecondActivity extends Activity {
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
TextView tv_second = (TextView) findViewById(R.id.tv_second);
intent = getIntent();
// 通过key得到得到对象
// getSerializableExtra得到序列化数据
User user = (User) intent.getSerializableExtra("key");
// 在TextView上设置 用户名和密码
tv_second.setText(user.getUsername() + " " + user.getPassword());
// 找到按钮,通过点击按钮返回第一个界面
Button btn_back = (Button) findViewById(R.id.btn_back);
// 点击事件
btn_back.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 发送返回数据 key可自己定义,但前后必须一样
intent.putExtra("key", "接收到数据了,现在通知第一个Activity");
// RESULT_OK 系统定义的int 值 为-1
setResult(RESULT_OK, intent);
// 关闭当前 Activity
finish();
}
});
}
}
参数传递与返回 需要注意前后的 键 相对应
相关文章
- Android开发之点九图的制作说明
- [Android Pro] 常用的android工具类和库
- Android UncaughtExceptionHandler进行全局异常捕获
- JAVA Eclipse如何开发Android的多页面程序
- Android 开发之旅:短信的收发及在android模拟器之间实践(二)
- Android Studio-解决Fetching android sdk component information加载过久问题
- Android API之android.os.Parcelable
- 1、Android Studio集成极光推送(Jpush) 报错 java.lang.UnsatisfiedLinkError: cn.jpush.android.service.PushProtoco
- Android应用程序与SurfaceFlinger服务之间的共享UI元数据(SharedClient)的创建过程分析 .
- macos安装android studio(Android Studio 2021.1.1)
- Android官方中文文档
- 41、Android中当数据库需要更新时我们该怎么办?
- android 状态栏、标题栏、屏幕高度
- Android中文API (110) —— CursorTreeAdapter
- android apk的安装,卸载和优化
- Android 系统NFC模块
- Android【报错】This class should be public (android.support.v7.internal.widget.ActionBarView.HomeView)
- 如何解决在Android Studio上导入GitHub旧项目后,左边的project不见了
- Android 9.0 systemui增加低电量弹窗
- Android 9.0 SystemUI 锁屏界面禁止状态栏下拉
- Android 9.0 10.0 去掉开机提示 android is starting 的对话框
- Android项目创建.prorperties配置文件和调用方法
- 【Android Gradle 插件】ProductFlavor 配置 ( ProductFlavor#manifestPlaceholders 清单文件占位符配置 )
- 【Android Gradle 插件】build.gradle 中的 android 配置 ( 配置项 | compileSdkVersion 配置 | buildToolsVersion 配置 )
- 【Android 逆向】ApkTool 工具使用 ( ApkTool 简介 | ApkTool 解包和打包 )
- 【Android 逆向】Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )
- eclipse下建立 android 项目,相关文件夹介绍
- (Android 即时通讯) [悬赏],不管是谁发现一个漏洞奖励人民币1000元!
- Android多媒体开发-- android中OpenMax的实现整体框架
- ( 转转)Android初级开发第九讲--Intent最全用法(打开文件跳转页面等)
- Android输入法架构学习总结
- Android kotlin 用Fragment+BottomNavigationView实现非左右滑动页面与底部导航栏功能
- Android kotlin 实现可点击可滑动顶部导航栏(AppBarLayout+TabLayout)和左右切换可滑动页面(ViewPager)的功能
- android 金钱计算BigDecimal+Scale+加减乘除
- Android Studio 理解com.android.support:appcompat-v7:x.x.x依赖包(建议收藏)
- Android Small插件化在项目中的应用(一)
- android开发,开发环境(Android Studio)安装