Activity之间传递参数(四)
--------siwuxie095
获取Activity的返回参数
1、首先修改两个布局文件,都修改为 LinearLayout 布局,
添加orientation属性为:vertical。
(1)为 activity_main.xml 添加一个 TextView,用于显示返回的数据
|
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.siwuxie095.sendargs.MainActivity"> <TextView android:text="TextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textView" android:layout_weight="1" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btnStartAty" android:text="启动另一个Activity"/> </LinearLayout> |
(2)为 activity_the_aty.xml 添加一个 EditText 和 Button,分别用于 输入
返回数据 和 点击返回第一个Activity
|
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_the_aty" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.siwuxie095.sendargs.TheAty"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World" android:id="@+id/tv"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPersonName" android:text="Name" android:ems="10" android:id="@+id/editText" /> <Button android:text="Send Back" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button" /> </LinearLayout> |
2、在 TheAty.java 中,添加 editText的声明和定义,为Button添加鼠标响应事件
|
package com.siwuxie095.sendargs; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.TextView; public class TheAty extends AppCompatActivity { private TextView tv; private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_the_aty); //TheAty是通过MainActivity中的Intent启动,直接通过getIntent()方法 //获取与这个Activity相关的Intent Intent i=getIntent(); // //在第二个Activity 即TheAty 获取Bundle //// Bundle data=i.getExtras(); // Bundle data=i.getBundleExtra("data"); //要访问TextView,先在上面声明 //findViewById()的返回值在编译时只能查看到类型是View,而事实上是TextView类型 //需要强制类型转换 tv= (TextView) findViewById(R.id.tv); //同tv editText= (EditText) findViewById(R.id.editText); // //调用setText()方法设置字符串,这里字符串通过Intent获取 // tv.setText(i.getStringExtra("data")); // 需要做一个强制类型转换 // User user= (User) i.getSerializableExtra("user"); //不需要强制类型转换 User user=i.getParcelableExtra("user"); //直接通过setText()方法传入字符串即可 tv.setText(String.format("User Info(name = %s, age = %d)",user.getName(),user.getAge())); // //用到了String.format() // // 假如有一个不存在的数据如namex // // 那么getString()有一个重载函数可以设置默认值 // tv.setText(String.format("name = %s, age = %d, namex = %s",data.getString("name"),data.getInt("age"),data.getString("namex","Mary"))); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i=new Intent(); i.putExtra("data",editText.getText().toString()); //setResult() 设置返回值:可设置返回状态码和返回数据(可重载) //不同状态码代表不同意义在MainActivity中可以根据传回的状态码 //判断发回数据的状态 setResult(1,i); //结束当前Activity finish(); } }); } } |
3、在 MainActivity.java 中,startActivity()被替换,同时重写函数 onActivityResult()
|
package com.siwuxie095.sendargs; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //需要强制类型转换 textView= (TextView) findViewById(R.id.textView); findViewById(R.id.btnStartAty).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //创建一个new Intent()实例,传入Context和Class类型的参数 //对应MainActivity.this 和被启动的Activity的类定义 TheAty.class Intent i = new Intent(MainActivity.this,TheAty.class); // //通过Intent对象,调用putExtra()方法,传参 // //这里传入String和String类型的参数,实际上就是键值对 // i.putExtra("data","你好我是传递的参数"); // //传递数据包要用到Bundle,通过Bundle存入多种类型数据,传给第二个Activity // Bundle b=new Bundle(); // //b.putBundle(); 即Bundle也可以嵌入Bundle // b.putString("name","Jack"); // b.putInt("age",22); // //putExtras() 传入Bundle //// i.putExtras(b); // //除了通过putExtras()传,还能用下面的putExra() // i.putExtra("data",b); i.putExtra("user",new User("Bill",18)); // //传入i // startActivity(i); //若要接收到TheAty传回的参数,不能使用startActivity(i) //要使用下面的函数,接收传回的参数 //requestCode 请求代码传给第二个Activity 由第二个Activity再传回 //通过请求代码确定此次请求的意义 startActivityForResult(i,0); } }); } //重写函数 onActivityResult() 有请求码和结果码 // 通过请求码判断请求的意义通过结果码判断结果数据的状态 //第三个参数Intent的数据来源于TheAty的setRsult()的第二个参数 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); textView.setText("另一个Activity返回的数据是:"+data.getStringExtra("data")); } } |
4、User.java 不变
|
package com.siwuxie095.sendargs; import android.os.Parcel; import android.os.Parcelable; import java.io.Serializable; /** * Created by siwux on 2017/1/2. */ //public class User implements Serializable{ 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; } //第一个方法不用管 @Override public int describeContents() { return 0; } //向目标dest的Parcel里写数据因为Parcelable没有全自动序列化机制需要手动写 //将数据保存起来方便传递给其他程序或Activity @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(getName()); dest.writeInt(getAge()); } //还需创建一个Creator,泛型是User public static final Creator<User> CREATOR = new Creator<User>() { //createFromParcel() 通过一个Parcel来创建对象 @Override public User createFromParcel(Parcel source) { //直接返回一个new User() // User中如果数据过多,也可以打包成Bundle // 直接writeBundle() readBundle()即可 return new User(source.readString(),source.readInt()); } @Override public User[] newArray(int size) { return new User[size]; } }; //注意这里还要加分号 } |
5、工程结构目录一览:

6、运行结果一览:



【made by siwuxie095】
Activity之间传递参数(四)的更多相关文章
- 在Activity之间传递参数(四)
获取Activity的返回参数(在参数(三)User的例子的基础上实现): 1.activity_the_aty.xml文件:<EditText android:id="@+id/ed ...
- Android学习总结——Activity之间传递参数
核心内容:一.在 Activity 之间传递简单数据二.在 Activity 之间传递复杂数据 三.在 Activity 之间传递自定义值对象 软件环境:Android Studio 一.在 ...
- Activity之间传递参数(三)
------siwuxie095 传递值对象,即自定义的有数据类型的对象 1.首先 new 一个 class:User,用于创建自定义对象,同时右键 Generate 出 Constructor.se ...
- Activity之间传递参数(二)
------siwuxie095 传递数据包 1.传递数据包要用到Bundle,MainActivity.java中: package com.siwuxie095.sendargs; import ...
- Activity之间传递参数(一)
-------siwuxie095 传递简单数据 (1)首先创建一个项目:SendArgs (2)选择API:21 Android 5.0 (3)选择 Empty Activity (4)默认 (5) ...
- 在Activity之间传递参数(一)
准备: 一.创建主界面:activity_main.xml文件中<Button android:text="启动另一个Activity" android:id="@ ...
- 在Activity之间传递参数(三)——serializable和parcelable的区别
传递值对象: 一.serializable实现:简单易用 serializable的迷人之处在于你只需要对某个类以及它的属性实现Serializable 接口即可.Serializable 接口是一种 ...
- 在Activity之间传递参数(二)
传递数据包bundle: 1.MainActivity.class: findViewById(R.id.btnStartAty).setOnClickListener(new View.OnClic ...
- Activity之间传递数据的方式及常见问题总结
Activity之间传递数据一般通过以下几种方式实现: 1. 通过intent传递数据 2. 通过Application 3. 使用单例 4. 静态成员变量.(可以考虑 WeakReferences) ...
随机推荐
- JavaScript笔记:函数
函数是定义一次但却可以调用或执行任意多次的代码块. 一.函数定义 javascript中的函数使用function关键字来定义,常用的函数定义分为三种形式: 声明式函数定义 function sum( ...
- 关于JavaScript lastIndexOf() 方法 w3school.com.cn写的不一定全对
关于JavaScript lastIndexOf() 方法 w3school.com.cn的表述是 定义和用法 lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的 ...
- ReactJS学习笔记(一)
1.依赖的资源: <script type="text/javascript" src='../asset/react.js'></script> &l ...
- 1045 access denied for user 'root'@'localhost' using password yes的解决方法
今天把一个项目和项目的数据库都下载到了本地,安装好项目和在本地配置好数据库后,在浏览器登陆项目的后台却出现了以下错误: 后来上百度搜索了好几个答案,都是讲述修改数据库密码的步骤,但是就是没有说明为 ...
- 一些对数学领域及数学研究的个人看法(转载自博士论坛wcboy)
转自:http://www.math.org.cn/forum.php?mod=viewthread&tid=14819&extra=&page=1 原作者: wcboy 现在 ...
- Redis的持久化的两种方式drbd以及aof日志方式
redis的持久化配置: 主要包括两种方式:1.快照 2 日志 来看一下redis的rdb的配置选项和它的工作原理: save 900 1 // 表示的是900s内,有1条写入,则产生快照 save ...
- Python语法三
1. from os.path import exists import 了又一个很好用的命令 exists.这个命令将文件名字符串作为参 数,如果文件存在的话,它将返回 True,否则将返回 Fal ...
- const char **
foo (const char **p){ } main (int argh,char **argv) { foo(argv); } warning : argument is i ...
- JQuery 常用
1.同一name分组的多个radio,获取选中radio的value值: var check_val=$("input[name='属性名']:checked").val(); 2 ...
- sqlserver存取过程游标
ALTER proc [dbo].[common_proc_temp2] as begin declare @id varchar(50); declare @cbcontractid varchar ...