Activity之间数据传递(一)(简单传递,数据包Bundle,传递对象)
一,简单传递(简单的字符串)
第一个activity通过putExtra()将字符串传入i
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btnStartAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i= new Intent(MainActivity.this,TheAty.class);
i.putExtra("date","Hello SWWWWWW");
startActivity(i);
}
});
}
第二个activity通过getIntent()获取之前put进来的数据,然后再set到UI界面中去
private TextView tv;
1 protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_the_aty);
Intent i =getIntent();
tv=(TextView) findViewById(R.id.tv);
//通过“date”关键字进行添加
tv.setText(i.getStringExtra("date"));
}
二,通过 包Bundle进行传递
通过首先将数据传入Bundle包,然后将bundle包放入第二个activity
然后再通过第二个activity获取这个包
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btnStartAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i= new Intent(MainActivity.this,TheAty.class);
Bundle b=new Bundle();
b.putString("name","SWWWWW");
b.putInt("age",21);
b.putString("depart","KuaiJi");
i.putExtras(b);
startActivity(i);
}
});
}
第二个activity获取包时:
private TextView tv;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_the_aty);
Intent i =getIntent();
Bundle data=i.getExtras();
tv=(TextView) findViewById(R.id.tv);
tv.setText(String.format("name=%s,age=%d,depart=%s",data.getString("name"),data.getInt("age"),data.getString("depart")));
}
个人觉得,最后一行format()中的那一段,类似于C语言中的printf~
三,传递一个对象
<一>Serializable接口
首先创建一个类User.java
构造方法User()、getter()和setter()需要创建
Serializable操作简单,只需要一句即可。但是相对来说效率比较低
后面我会介绍另一种方法:继承Parcelable接口
public class User implements Serializable{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public User(String name, int age){
this.name=name;
this.age=age;
}
}
同样的,new的一个新的类压入到Intent i中去
然后通过后面一个activity中getIntent()出来
MainActivity动作:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btnStartAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i= new Intent(MainActivity.this,TheAty.class);
i.putExtra("user",new User("SWWWW",21));
startActivity(i);
}
});
}
TheAty动作:
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_the_aty); Intent i =getIntent();
// Bundle data=i.getExtras();
tv=(TextView) findViewById(R.id.tv);
// //tv.setText(i.getStringExtra("date"));
// tv.setText(String.format("name=%s,age=%d,depart=%s",data.getString("name"),data.getInt("age"),data.getString("depart"))); User user= (User) i.getSerializableExtra("user");
tv.setText(String.format("User info(name=%s, age=%d)",user.getName(),user.getAge())); }
<二>继承Parcelable接口
同样的,先写一个User.java类
这里比较麻烦的就是必须要重写两个函数:
writeToParcel和describeContents 即代码的最后两个函数
第一个不需要改变
第二个则模拟了第一个方法中的读取方法,不过是我们程序猿手写。但是效率高。
为了代码更优,还是建议大家使用这种方法。
public class User implements Parcelable {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public User(String name, int age){
this.name=name;
this.age=age;
}
protected User(Parcel in) {
name = in.readString();
age = in.readInt();
}
public static final Creator<User> CREATOR = new Creator<User>() {
@Override
public User createFromParcel(Parcel in) {
return new User(in.readString(),in.readInt());
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(getName());
dest.writeInt(getAge());
}
}
最后还需要改动的一点是:
User user= (User) i.getSerializableExtra("user");
需要改为:
User user=i.getParcelableExtra("user");
Activity之间数据传递(一)(简单传递,数据包Bundle,传递对象)的更多相关文章
- Activity之间的数据传递-android学习之旅(四十七)
activity之间的数据传递主要有两种,一种是直接发送数据,另一种接受新启动的activity返回的数据,本质是一样的 使用Bundle传递数据 Intent使用Bundle在activity之间传 ...
- 基于Intent实现Activity与Activity之间的数据传递,实现二个Activity的跳转功能
在讲参数传递之前,先讲下intent的定义: Intent intent = new Intent(MainActivity.this,SecondActivity.class); //这是显式定义 ...
- 在Activity之间传递数据—简单数据/Bundle
1.首先要知道怎么通过一个Activity 打开另一个Activity.主页面为MainActivity,另一个页面为OtherActivity.MainActivity中的按钮Id为btnStart ...
- 简单的三方登录SDK示例,Android Activity之间数据的传递
先建立Library工程,即普通工程然后在Android的属性勾选Library选项. 这里建立的工程为 mySdk ,Activity名为LoginActivity. LoginActivity代码 ...
- 37.Activity之间的转换以及数据的传递(Intent)学习
Intent简介: 在一个Androi ...
- Activity之间使用intent传递大量数据带来问题总结
转载:大飞 http://blog.csdn.net/rflyee/article/details/47441405 Activity之间使用Parcel传递大量数据产生的问题. Activity ...
- 解析activity之间数据传递方法的详解
转自:http://www.jb51.net/article/37227.htm 本篇文章是对activity之间数据传递的方法进行了详细的分析介绍,需要的朋友参考下 1 基于消息的通信机制 ...
- android中使用Intent在activity之间传递数据
android中intent传递数据的简单使用: 1.使用intent传递数据: 首先将需要传递的数据放入到intent中 Intent intent = new Intent(MainActivit ...
- 在Activity之间如何传递数据,请尽可能说出你所知道的传递数据的方法,并详细描述其实现过程。
在Activity之间如何传递数据,请尽可能说出你所知道的传递数据的方法,并详细描述其实现过程. 答案:可以通过Intent对象.静态变量.剪切板和全局对象进行数据传递,具体的数据传递方法如下. 1. ...
随机推荐
- 给NIOS II CPU增加看门狗定时器并使用
给NIOS II CPU增加看门狗定时器并使用 配置看门狗定时器: 设置计时溢出时间为1秒 计数器位宽为32位 勾选No Start/Stop control bits 勾选Fixed perio ...
- 【转】Struts1.x系列教程(5):HTML标签库
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/0 ...
- 20160330001 调用及触发Office Outlook 约会
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- 复旦高等代数 I(15级)思考题
1.证明: 第三类分块初等变换是若干个第三类初等变换的复合. 特别地, 第三类分块初等变换不改变行列式的值. 2.设 $n\,(n\geq 2)$ 阶方阵 $A=(a_{ij}(x))$, 其中每个元 ...
- 制作登录界面,登录成功后把用户名放在session里,在第3个页面读取session显示用户名
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- Number To Indian Rupee Words in Oracle Forms / Reports
Convert numbers to Indian Rupees format in Oracle Forms / Reports.Create the below mention function ...
- chrome的timeline中stalled问题解析
原文地址 :http://foio.github.io/chrome-stalled/ 在公司国做一个运营活动,上线后PM总是抱怨访问速度过慢,影响运营效果.然而从前端的角度来说我已经做了如下优化: ...
- iOS - Apache Tomcat WebServer 服务器配置
前言 提前下载好相关软件,且安装目录最好安装在全英文路径下.如果路径有中文名,那么可能会出现一些莫名其妙的问题. 提前准备好的软件: apache-tomcat-6.0.45.tar.gz eclip ...
- filter 过滤缓存
package fifter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.Filter ...
- RMAN的入门篇
一.RMAN连接数据库 1. 连接本地数据库 [oracle@oracle hotbak]$ export oracle_sid=orcl [oracle@oracle hotbak]$ rman ...