Android学习笔记(十二)——使用意图传递数据的几种方式

使用意图传递数据的几种方式

点此获取完整代码

我们除了要从活动返回数据,也常常要传递数据给活动。对此我们可以使用Intent对象将这些数据传递给目标活动。

1、创建一个名为PassingData的项目,在activity_main.xml文件中添加一个Button:

    <Button
        android:id="@+id/btn_SecondActivity"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="onClick"
        android:text="Click to go to Second Activity" />

2、在res/layout文件夹中添加一个新的secondactivity.xml文件,添加TextView和Button:

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Welcome to Second Activity" />

    <Button
        android:id="@+id/btn_MainActivity"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="onClick"
        android:text="Click to return to main activity" />

3、在当前包中新建一个Class,命名为SecondActivity,在SecondActivity.java中添加如下代码:

package com.example.passingdata;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class SecondActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.secondactivity);
		// 为了获得通过Intent对象发送的数据,先使用getIntent()方法获取Intent对象,
		// 再调用该对象的getStringExtra()方法来获得使用putExtra()方法设置的字符串值
		Toast.makeText(this, getIntent().getStringExtra("str1"),
				Toast.LENGTH_SHORT).show();
		// 同上,对于整数值,调用getIntExtra()方法(注意,如果该名称没有存储值,则会使用默认值,在此为0)
		Toast.makeText(this,
				Integer.toString(getIntent().getIntExtra("age1", 0)),
				Toast.LENGTH_SHORT).show();
		// 获取Bundle对象,要使用getExtras()方法:对于字符串值,使用getString();对于整数值,使用getInt()
		Bundle bundle = getIntent().getExtras();
		Toast.makeText(this, bundle.getString("str2"), Toast.LENGTH_SHORT)
				.show();
		Toast.makeText(this, Integer.toString(bundle.getInt("age2")),
				Toast.LENGTH_SHORT).show();
	}

	public void onClick(View v) {
		Intent intent = new Intent();
		intent.putExtra("age3", 45);
		// 回传可以使用setData()方法(上一篇中讲过)
		intent.setData(Uri.parse("Something passed back to main activity"));
		// 设置Intent和结果码
		setResult(RESULT_OK, intent);
		// 关闭活动
		finish();
	}
}

4、在AndroidManifest.xml文件中添加如下代码:

        <activity
            android:name=".SecondActivity"
            android:label="Second Activity" >
            <intent-filter>
                <action android:name="net.zenail.PassingData.SecondActivity" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

5、在MainActivity.java文件中添加如下代码:

	public void onClick(View view) {
		Intent intent = new Intent("net.zenail.PassingData.SecondActivity");
		// 法一:使用putExtra()方法为Intent对象添加了两个键/值对:String和integer类型
		intent.putExtra("str1", "This is a string");
		intent.putExtra("age1", 25);

		// 法二:创建Bundle对象,向其添加两个键/值对,再使用putExtras添加给Intent对象
		Bundle extras = new Bundle();
		extras.putString("str2", "This is another string");
		extras.putInt("age2", 35);
		intent.putExtras(extras);

		// 启动活动并设置1为请求码
		startActivityForResult(intent, 1);
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		if (requestCode == 1) {
			if (resultCode == RESULT_OK) {
				// 用getIntExtra()获取用putExtra()设置的整数值
				Toast.makeText(this,
						Integer.toString(data.getIntExtra("age3", 0)),
						Toast.LENGTH_SHORT).show();

				// 用getData()获取用setData()设置的字符串值
				Toast.makeText(this, data.getData().toString(),
						Toast.LENGTH_SHORT).show();
			}
		}
	}

6、运行,效果如下:

点击按钮:

出现如下画面:

消息框消失,点击按钮,出现如下画面:

Android学习笔记(十二)——使用意图传递数据的几种方式

时间: 2024-10-03 08:07:13

Android学习笔记(十二)——使用意图传递数据的几种方式的相关文章

Android学习笔记十二.深入理解LauncherActvity 之LauncherActivity、PreferenceActivity、PreferenceFragment

深入理解LauncherActvity 之LauncherActivity.PreferenceActivity.PreferenceFragment 从下图我们可以知道,LauncherActivity.PreferanceActivity均继承于ListActivity,其中LauncherActivity实现当列表界面列表项被点击时所对应的Acitvity被启动:PreferanceActivity实现一个程序参数设置.存储功能的Activity列表界面. 一.LauncherActivi

【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter

目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续探讨BaseAdapter 我们可以同继承抽象类BaseAdapter来实现自己的Adapter,自己设置子View的UI,不同子View可以由不同的布局,并自己进行数据和子view中数据的对应关系.图是例子的呈现结果,我们有很多图标,对这些图标按一定大小进行缩放,然后布局在GridView中.这个

《Hibernate学习笔记十二》学生、课程、分数关系的设计与实现

<Hibernate学习笔记十二>学生.课程.分数关系的设计与实现 这个马士兵老师的Hibernate视频学习的一个题目,这里面要用到多对多.多对一的关联关系以及联合主键,因此觉得挺好的,自己写篇博文来记录下. 先考虑数据库表 1.学生表:为简单起见,只考虑了学生id和学生姓名,其中id为主键 2.课程表:为简单起见,只考虑了课程id和课程名称,其中id为主键 3.分数表 分数表有两种解决方案 3.1 第一种为:使用联合主键:student_id 和 course_id 3.2 第二种:不使用

Swift学习笔记十二:下标脚本(subscript)

下标脚本就是对一个东西通过索引,快速取值的一种语法,例如数组的a[0].这就是一个下标脚本.通过索引0来快速取值.在Swift中,我们可以对类(Class).结构体(structure)和枚举(enumeration)中自己定义下标脚本的语法 一.常规定义 class Student{ var scores:Int[] = Array(count:5,repeatedValue:0) subscript(index:Int) -> Int{ get{ return scores[index];

Android学习笔记(二)--iparty登陆界面

打开应用,判断是否第一次使用. 1 private void beforeInitMenu() { 2 AppContext appContext = (AppContext) getApplicationContext(); 3 4 if (appContext.isFirstLogin()) { 5 // 第一次启动 6 //如果第一次启动,出现5张引导图片. 7 Intent intent = new Intent(this, GuideActivity.class); 8 startAc

虚拟机VMWare学习笔记十二 - 将物理机抓取成虚拟机

1. 安装VMware vCenter Converter Standalone Client 运行虚拟机,File -- Virtualize a Physical Machine 这时如果电脑中没有VMware vCenter Converter Standalone Client ,则会进行安装. 安装过程 之后图标会出现在桌面上,双击运行 选择连接到本地服务器,登陆 点击转换计算机 这个,可以将本地计算机抓取成虚拟机,也可以将其他可以访问的计算机(需知道管理员用户名及密码)抓取成虚拟机.

Android学习笔记(二):搭建安卓开发环境

① 下载 JDK 5 or JDK 6 (JRE alone is not sufficient) ->安装->设置环境变量JAVA_HOME CLASSPATH path 下载地址:Download JDK ② 下载 Eclipse 3.3 (Europa), 3.4 (Ganymede) IDE for JAVA-> 解压 下载地址:Eclipse for JAVA developer ③ 下载 Android SDK 解压-> path 里加入 SDK 包中的 tools 目

laravel3学习笔记(十二)

原作者博客:ieqi.net ==================================================================================================== 请求反射 HTTP 协议本身是无状态性的,但是在应用中处理各种业务逻辑时我们必须要有状态的把控,这样,折中的办法就是将状态进行标记然后嵌入到 HTTP 协议的请求中,然后应用根据这些标记来进行状态的串联以及处理.所以我们就要对请求进行反射处理以获取请求信息, Lara

react之传递数据的几种方式props传值、路由传值、状态提升、redux、context

react之传递数据的几种方式 1.父子传值 父传值:<子的标签 value={'aaa'} index={'bbb'}></子的标签> 子接值:<li key={this.props.index}>{this.props.value}</li> 不止可以传值也可以传递方法: 父:方法={this.方法} 子:{this.props.方法.bind(this)} 传来的参数子组件可以使用,此处用{value,index}等解构赋值省去this.props 此