Intent实现页面跳转和传值
*Intent称为意图,是Android各大组件连接的桥梁
1.Activity页面跳转
同一个包内
Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondActivity.class);
MainActivity.this.startActivity(intent);
不同包内
(1)明确的Intent
Intent intent = new Intent();
ComponentName comp = new ComponentName("包名(应用本身所在的包,通过AndroidManifest.xml中package属性查看)","包名.类名(Activity所在的包)");
//或者intent.setClassName("包名","包名.类名");
intent.setComponent(comp);
startActivity(intent);
(2)不明确的Intent
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN); // 应用程序的入口
intent.addCategory(Intent.CATEGORY_HOME); // 桌面的应用程序
startActivity(intent);
然后在AndroidManifest.xml中注册该过滤条件
<activity
android:name=".OtherActivity"
android:label="OtherActivity" >
<intent-filter>
<action android:name="action_name" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
注:
*第一个Activity是外部通过不明确的Intent跳转的
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
2.Activity页面跳转传值
第一种方法:(Intent)
发送方:
Intent intent = new Intent();
intent.putExtra("name", "诸葛亮");
intent.putExtra("age", 50);
intent.putExtra("IQ", 200.0f);
intent.setClass(MainActivity.this, SecondActivity.class);
MainActivity.this.startActivity(intent);
接受方:
Intent intent = getIntent();
String name = intent.getStringExtra("name");
int age = intent.getIntExtra("age", 0);
float IQ = intent.getFloatExtra("IQ", 0.0f);
textview2.setText("name:"+name+",age:"+age+",IQ:"+IQ);
第二种方法:(Bundle)
发送方:
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("name", "乔峰");
bundle.putInt("age", 40);
bundle.putFloat("weight", 70.4f);
intent.putExtras(bundle);
intent.setClass(MainActivity.this, SecondActivity.class);
startActivity(intent);
接受方:
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String name = bundle.getString("name");
int age = bundle.getInt("age");
float weight = bundle.getFloat("weight");
textview.setText(name+","+age+","+weight);
第三种方法:(Application)
首先要新建一个继承Application的MyApp类,补充属性的get/set方法
AndroidManifest.xml也要配置application的属性android:name=".MyApp"
发送方:
MyApp myApp = (MyApp) getApplication();
myApp.setName("周星驰");
Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondActivity.class);
startActivity(intent);
接受方:
MyApp myApp = (MyApp) getApplication();
String name = myApp.getName();
textview = (TextView) findViewById(R.id.textview);
textview.setText(name);
第四种方法:(推荐)
对象类要实现Parclelable接口
发送方:
Intent intent = new Intent();
Person person = new Person("孙悟空",500,55.6f);
intent.putExtra("person", person);
intent.setClass(MainActivity.this, SecondActivity.class);
startActivity(intent);
接受方:
Intent intent = getIntent();
Person person = intent.getParcelableExtra("person");
textview = (TextView) findViewById(R.id.textview);
textview.setText(person.toString());
对象类:
public class Person implements Parcelable {
private String name;
private int age;
private float weight;
public Person() {
super();
// TODO Auto-generated constructor stub
}
public Person(String name, int age, float weight) {
super();
this.name = name;
this.age = age;
this.weight = weight;
}
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 float getWeight() {
return weight;
}
public void setWeight(float weight) {
this.weight = weight;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", weight=" + weight + "]";
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
dest.writeFloat(weight);
}
public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
public Person createFromParcel(Parcel in) {
return new Person(in);
}
public Person[] newArray(int size) {
return new Person[size];
}
};
private Person(Parcel in) {
name = in.readString();
age = in.readInt();
weight = in.readFloat();
}
}
3.页面返回传值
被返回方:
startActivityForResult(intent, 38);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Bundle bundle = data.getExtras();
String name = bundle.getString("name");
int age = bundle.getInt("age");
float weight = bundle.getFloat("weight");
Toast.makeText(MainActivity.this, name+age+weight, Toast.LENGTH_LONG).show();
super.onActivityResult(requestCode, resultCode, data);
}
返回方:
Intent data = new Intent();
data.setClass(SecondActivity.this, MainActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name", "张无忌");
bundle.putInt("age", 20);
bundle.putFloat("weight", 120.5f);
data.putExtras(bundle);
setResult(250, data);
finish();
启动Activity
上下文中,通过如下方法启动Activity
*startActivity(Intent intent):启动新的Activity
*startActivityForResult(Intent intent, int requestCode):指定请求码启动新的Activity
如果使用startActivityForResult()启动Activity,则必须重写onActivityResult()方法,并且该方法第一个参数与requestCode相对应
关闭Activity
上下文中,通过如下方法关闭Activity
*finish():关闭当前Activity
*finishActivity(int requestCode):关闭以startActivity启动的Activity
在调用finish()关闭当前Activity前,可以调用setResult(int resultCode)设置返回码。返回码在启动的Activity中通过onActivityResult()捕获
欢迎关注我的微信公众号:安卓圈

Intent实现页面跳转和传值的更多相关文章
- Android中实现activity的页面跳转并传值
一个Android应用程序很少会只有一个Activity对象,如何在多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求. 本次我们就讲一下,Android中页面跳转以及传值的几种方式 ...
- iOS——使用StroryBoard页面跳转及传值
之前在网上搜iOS的页面跳转大多都是按回以前的那种xib的形式,但鄙人是使用storyboard的.这篇就只介绍利用storyboard进行页面跳转与传值. 新建页面 iOS的程序也是使用了MVC的思 ...
- Intent实现页面跳转
Intent实现页面跳转: 1. startActivity(intent) 2. startActivityForResult(intent,requestCode); onActivityResu ...
- iOS使用StroryBoard页面跳转及传值
之前在网上iOS的页面跳转大多都是按回以前的那种xib的形式,但鄙人是使用storyboard的.这篇就只介绍利用storyboard进行页面跳转与传值. 新建页面 iOS的程序也是使用了MVC的思想 ...
- H5页面跳转与传值
页面之间的跳转经常使用a标签,使用mvc框架的都是通过访问controller的请求方法,返回请求页面.但本次开发,前端与后台完全分离,前端APP使用HBuider来开发,后台数据就无法使用mvc框架 ...
- flutter -------- 页面跳转和传值
在安卓原生开发中,页面跳转可以用Intent类来具体实现: Intent intent =new Intent(MainActivity.this,second.class); startActivi ...
- Android成长日记-使用Intent实现页面跳转
Intent:可以理解为信使(意图),由Intent来协助完成Android各个组件之间的通讯 Intent实现页面之间的跳转 1->startActivity(intent) 2->st ...
- MVC 【Razor 视图引擎】基础操作 --页面跳转,传值,表单提交
ASPX 与 Razor 仅仅是视图不一样. 新建项目----ASP.NET MVC 4 Web 应用程序------选择模板(空).视图引擎(Razor ) 1.视图中 c# 代码 与 HT ...
- swift 下storyboard的页面跳转和传值
------------------1. 最简单的方法 拖拽, 这个就不用多解释了吧. 直接拖拽到另一个视图控制器, 选择 show, 就行了. 2. 利用 Segue 方法 (这里主要是 方法1 的 ...
随机推荐
- HttpRuntime应用程序的运行时
System.Web.HttpRuntime类是整个Asp.net服务器处理的入口. 这个类提供了一系列的静态属性,反映web应用程序域的设置信息,而且每个web应用程序域中存在一个System.We ...
- 我的css释疑-float line-height inline-block vertical-align
markdown的图片和链接格式相类似: [链接文字/图片的alt text] (链接地址/ 图片的地址), 只是图片要在前面加上感叹号! 当内容中含有图片的时候,如果图片的高度大于行高,则含有图片 ...
- shell脚本监控Flume输出到HDFS上文件合法性
在使用flume中发现由于网络.HDFS等其它原因,使得经过Flume收集到HDFS上得日志有一些异常,表现为: 1.有未关闭的文件:以tmp(默认)结尾的文件.加入存到HDFS上得文件应该是gz压缩 ...
- Spring常用的接口和类(一)
一.ApplicationContextAware接口 当一个类需要获取ApplicationContext实例时,可以让该类实现ApplicationContextAware接口.代码展示如下: p ...
- 磁盘 I/O 性能监控指标和调优方法
在介绍磁盘 I/O 监控命令前,我们需要了解磁盘 I/O 性能监控的指标,以及每个指标的所揭示的磁盘某方面的性能.磁盘 I/O 性能监控的指标主要包括:指标 1:每秒 I/O 数(IOPS 或 tps ...
- memcached工作原理
1.Memcached处理的原子是每一个(key,value)对(以下简称kv对),key会通过一个hash算法转化成hash-key,便于查找.对比以及做到尽可能的散列.同时,memcached用的 ...
- linux配置ant
第1步:下载ant ,地址:http://ftp.twaren.net/Unix/Web/apache//ant/binaries/apache-ant-1.9.6-bin.tar.gz apache ...
- 安装UnityVS 2012步骤
英文原文是: Cracked by Twisted89//////////////////////////////////////////////////// INSTALL INSTRUCTIONS ...
- mysql数据库性能优化(包括SQL,表结构,索引,缓存)
优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当 ...
- HDU 1505 City Game (hdu1506 dp二维加强版)
F - City Game Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submi ...