Intent传递数据
方式比较多,先看看代码,一会儿再总结。
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="向第二个活动传递数据" />
</RelativeLayout>
secondactivity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="这是第二个活动" />
<Button
android:id="@+id/btn2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="返回数据" />
</LinearLayout>
SecondActivity.java
public class SecondActivity extends Activity implements OnClickListener
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.secondactivity);
Button btn = (Button) findViewById(R.id.btn2);
btn.setOnClickListener(this);
//第一种方式 intent.getStringExtra(String);或者intent.getIntExtra(String,int defaultValue);
Toast.makeText(this, getIntent().getStringExtra("str1"), Toast.LENGTH_LONG).show();
//Toast.makeText(this, getIntent().getIntExtra("age", 0), Toast.LENGTH_LONG).show();
//第二种方式、利用Bundle对象,bundle.getString()或者bundle.getInt();
//Bundle bundle = getIntent().getExtras();
//Toast.makeText(this, bundle.getString("str2"), Toast.LENGTH_LONG).show();
//Toast.makeText(this,bundle.getInt("age2"),Toast.LENGTH_LONG).show();
}
@Override
public void onClick(View v)
{
Intent intent = new Intent();
//返回数据的
//第一种方式 putExtra()
intent.putExtra("age3", 45);
//第二种方式setExtra()
//intent.setData(Uri.parse("我是返回数据"));
setResult(RESULT_OK,intent);
//一定记得关闭当前activity并返回控制权
finish();
}
}
在AndroidManifest.xml中注册。
<activity
android:name=".SecondActivity"
android:label="@string/second_activity">
<intent-filter >
<action android:name="com.example.passingdata"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
MainActivity.java
public class MainActivity extends Activity implements OnClickListener
{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.btn1);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
//传递数据的话,也要带上请求码
Intent intent = new Intent("com.example.passingdata.SecondActivity");
//传递数据的方式1: 使用 intent.putExtra();
intent.putExtra("str1", "String1");
intent.putExtra("age", 25);
//方式2:bundle.putString(); bundle.putInt();最后把bundle绑定到intent上intent.putExtras();
//Bundle bundle = new Bundle();
//bundle.putString("str2", "String2");
//bundle.putInt("age2", 35);
//intent.putExtras(bundle); //从这里可以看出,bundle作用上也相当于一个集合
startActivityForResult(intent,1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode==1)
{
if(resultCode==RESULT_OK)
{
//取得数据
//方式1: getIntExtra()
Toast.makeText(this,
Integer.toString(data.getIntExtra("age3", 0)),
Toast.LENGTH_LONG).show();
//方式2: intent.getData(); 它对应了Uri.parse()那种
//Toast.makeText(this, data.getData().toString(), Toast.LENGTH_LONG).show();
}
}
}
}
(注意不要在传递数据的时候,用多种方式,很容易出错)
看看效果:

点击一个“返回数据”



闭着眼小结一下:(传递数据死活离不开intent,目前我了解到的是这样)
发送方:
a. intent.putExtra() ,也就是putExtra()的方式添加 Key/Value
b. 先把键值对给bundle对象,bundle.putString()或者bundle.putInt();然后把bundle给intent:intent.putExtras();
c.intent.setData(Uri.parse(String)) //应该是用于打开网页吧?
--------------(发送完了记得finish())
接受方:
a. getIntent()之后 ,用intent.getStringExtra() / intent.getIntExtra();
b. getIntent()之后,intent.getExtras()获取bundle对象,在之后,bundle.getString() / bundle.getInt()
c.intent.getData().toString();
好了,就这么多,记牢。
Intent传递数据的更多相关文章
- Android Intent传递数据
刚开始看郭大神的<>,实现以下里面的一些例子.Intent传递数据. 我们利用显示的方式进行Intent的启动. 1.启动intent并输入数据. Intent intent=new In ...
- 【转】Android 之最新最全的Intent传递数据方法
原文地址:https://www.jianshu.com/p/1169dba99261 intent传递数据 为什么要和intent单独拿出来讲,因为Intent传递数据也是非常重要的 一.简单的传递 ...
- Android Activity传递数据使用getIntent()接收不到,揭秘Intent传递数据与Activity启动模式singleTask的关系。
activity通过intent传递数据的时候,如果activity未启动,那么在这个刚启动的activity里通过getIntent()会获取到这个intent的数据.. 如果要启动的activit ...
- Android 消息广播Intent传递数据
1.创建布局文件activity_broadcast.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk ...
- Android 开发中使用Intent传递数据的方法
Activity之间通过Intent传递值,支持基本数据类型和String对象及 它们的数组对象byte.byte[].char.char[].boolean.boolean[].short.shor ...
- Android学习之Intent传递数据
Intent在Activity中的作用主要是有两个: 1.启动目标Activity 2.传递数据 Intent在传递数据时分两种情况:向下一个Activity传递数据和从下一个Activity返回数据 ...
- [Android] Android 最全 Intent 传递数据姿势
我们都是用过 Intent,用它来在组件之间传递数据,所以说 Intent 是组件之间通信的使者,一般情况下,我们传递的都是一些比较简单的数据,并且都是基本的数据类型,写法也比较简单,今天我在这里说的 ...
- Android学习之基础知识四-Activity活动4讲(Intent传递数据)
Intent除了可以开启一个活动,还能在启动活动的时候传递数据,此时Intent相当于一个保存数据的库,我们先把数据保存在Intent中,然后再根据各个activity的需要从其中取出数据. 一.使 ...
- Intent传递数据全解
概述 之前的博文也有介绍,查看-->用户界面开发基础 这里单独抽取出来,更加具体的记录一下,事实上主要是API的使用. Intent传递简单数据 能够以直接通过调用Intent的putExtra ...
随机推荐
- 【python爬虫】根据查询词爬取网站返回结果
最近在做语义方面的问题,需要反义词.就在网上找反义词大全之类的,但是大多不全,没有我想要的.然后就找相关的网站,发现了http://fanyici.xpcha.com/5f7x868lizu.html ...
- Effective C++条款01: 视C++为一个语言联邦
一开始C++定义为:C with Classes. 如今的C++已经是一个多重范型编程语言,可以把C++视为有四个次语言组成的联邦语言. C.C++任然以C为基础.区块.语句.预处理.内置语言类型.数 ...
- linux环境下,利用tc限制两台服务器间的网速,非常简单。
最近再搞postgres的数据同步,需要模拟异地机房有带宽限制时的同步效果,所以想要限制一下两台机器之间的网速. ts命令功能很强,同时也好难理解和使用,经常浪费了好半天还是搞不定. 这里分享一个简单 ...
- Java 数据结构之Stack
Stack类表示后进先出(LIFO)的对象堆栈.栈是一种非常常见的数据结构.Stack继承Vector,并对其进行了扩展. 用法: 1.只有一个构造函数: public Stack() {} 2.创建 ...
- 基于web工作流开发
目前在研发基于web工作流的开发 什么是工作流? 工作流简言之就是: 1.反应业务流程的计算机化的模型. 2.一类能够完全或者部分自动执行的经营过程:(为了提高效率,实现自动化). 3.任务.活动及活 ...
- 索引 split2
当往一个已经满了的索引块中插入新的索引条目时,将发生索引块的split,在9i下,分两种不同的情况进行split: (1)如果插入的索引键值不是最大的,将发生50-50的split,也就是说有bloc ...
- PDO数据库
<?php //定义数据源$dsn = "mysql:dbname=testa;host=localhost"; //造PDO对象$pdo = new PDO($dsn,&q ...
- R语言iris数据集的层次聚类
data=iris[,-5]dist.e=dist(data,method='euclidean')model1=hclust(dist.e,method='ward') #分3类result=cut ...
- R语言将5位数字日期转为正常日期
R语言中用double表示日期,即从1970-1-1距离给定日期的天数,将5位数字日期转为正常日期格式的方法 as.Date(16543,origin='1970-1-1')
- 51nod1431 快乐排队
神???.我们可以发现无论怎么交换ai+i都是不变的.那么这样就可以了 #include<cstdio> #include<cstring> #include<cctyp ...