androidintent传递
① android intent 能传递多少个parcelable
android intent传递数据是没有数量限制的,但是Parcelable是将数据存到内存中的ROM中,数量是没有限制的,但是一个android应用进程最大使用16MB的内存。
Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来完成请求。比如,有一个Activity希望打开网页浏览器查看某一网页的内容,那么这个Activity只需要发出WEB_SEARCH_ACTION给Android,Android就会根据Intent的请求内容,查询各组件注册时声明的IntentFilter,找到网页浏览器的Activity来浏览网页。
在Android中实现Parcelable接口的类可以支持序列与反序列化,以下是一个实现的举例:
1. 实现Parcelable接口
2. 添加实体属性
3. 覆写writeToParcel(Parcel dest, int flags)方法,指定写入Parcel类的数据。
4. 创建Parcelable.Creator静态对象,有两个方法createFromParcel(Parcel in)与newArray(int size),前者指定如何从Parcel中读取出数据对象,后者创建一个数组。
5. 覆写describeContents方法,默认返回0。
② Android Intent 如何接收到指定的Intent传递过来的值呢
首先,尽量不要用try{}catch去捕捉能用判断规避的异常,那样会影响效率,每次出现异常,虚拟机要抓错误调用堆栈。所以,最好的方式是通过判断去规避。
按你的思路,可以先判断getIntent.getExtras()是否为null。
Intent
_getIntent
=
this.getIntent();
if(
_getIntent.getExtras()
!=
null){
Log.i("YuryLog","理论上只有点了确认键才执行");
receiveName
=
_getIntent.getExtras().getString("sendName");
receiveEatSomething
=
_getIntent.getExtras().getString("sendeatSomething");
receiveCopies
=
_getIntent.getExtras().getString("sendcopies");
......
要指出的是,上述代码,最好使用getXXXExtra这类方法,它不会出现空指针(除了少数几个,比方说getStringExtra)。
需要设定默认值的,在没有值时它会返回默认值;没有设置默认值的,在没有值时会返回null,针对这类判空一下。
可以看下getBooleanExtra的源码:
public
boolean
getBooleanExtra(String
name,
boolean
defaultValue)
{
return
mExtras
==
null
?
defaultValue
:
mExtras.getBoolean(name,
defaultValue);
}
而getExtras()在没有值时会返回null,看下源码:
public
Bundle
getExtras()
{
return
(mExtras
!=
null)
?
new
Bundle(mExtras)
:
null;
}
所以,最好不要用getIntent().getExtras()这种方式,换用getIntent().getXXXExtras(),这样针对有设置默认值的就不需要判空了。
activity之间传值,是没有机制可以确定哪个activity传过来的。这是考虑到代码的可扩展性,解耦。要确定哪个activity发过来,在intent创建那里多传个布尔值就行,比方说下面的代码。
发送
intent.putExtra("fromXXActivity",
true);
接收
if
(getIntent().getBooleanExtra("fromXXActivity",
false))
{
......
//
这里,你就可以安全的接收那个activity发过来的所有值。
}
③ android intent 传数据问题,能否确定传入的数据来自哪个activity
完全可以,只需要往intent里面添加一个标识数据即可
//两个activity
java">//第一个activity
{
privateButtonbtn;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
Intentintent=newIntent(OneActivity.this,EditActivity.class);
intent.putExtra("from",1);
startActivity(intent);
}
});
}
}
//第二个activity
{
privateButtonbtn;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
Intentintent=newIntent(OneActivity.this,EditActivity.class);
intent.putExtra("from",2);
startActivity(intent);
}
});
}
}
编辑activity,判断intent传进来的from数据,为1即为OneActivity,2为TwoActivity
{
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intentintent=getIntent();
intfrom=intent.getIntExtra("from",0);
switch(from){
case1:
//OneActivity
break;
case2:
//TwoActivity
break;
//case.......
}
}
}
④ 安卓 intent 怎么传递一个对象
这个传递了一个user类的对象,在user类中需要(implements
Serializable)实现这个接口
Intent
intent=new
Intent();
Bundle
extras=new
Bundle();
extras.putSerializable("aaa",
user);
intent.putExtras(extras);
⑤ android开发intent怎么传递集合
1、Intent(意图)主要是解决Android应用的各项组件之间的通讯。
2、为了实现传递数据这个目的需要以下步骤
3、Activity1需要构造一个 Intent,这个Intent用于告诉系统,我们要做“查看”动作
intent可调用putExtra来存放想要传递的数据
4、然后调用setClass,设置Activity1和欲调用的组件Activity2
5、最后调用startActivity将构造的Intent传入,系统会根据此Intent中的描述,到Activity1中找到满足此Intent要求的Activity,系统会调用找到的 Activity2最终传入Intent在Activity2中可使用getIntent来获取传递的Intent,并通过获取数据的方法来获取数据代码示例:
Intent intent = new Intent(); // Activity1
intent.putExtra("one", num1);
intent.putExtra("two", num2);
intent.setClass(FirstActivity.this, SecondActivity.class);
startActivity(intent); Intent intent = getIntent(); //Activity2
String num1 = intent.getStringExtra("one");
String num2 = intent.getStringExtra("two");
int ret = Integer.parseInt(num1) + Integer.parseInt(num2);
result.setText(ret+"");
注意:在使用intent的时候可以使用bundle传递复制的数据类型。
⑥ intent传值是如何传的
intent翻译为中文的意思是意图,目的。它的作用就是调用某个组件去做某一个事情。比如从当前运行的activity跳转到另一个activity,当前activity要启动一个service或启动一个broadcastreceive(广播接收器),此时就需要用intent来完成。简单的说intent是各个组件的一个桥梁。既然充当了桥梁的角色,那么intent就该可以传递数据,把当前的组件的数据传递到另一个组件去使用,那么intent是如何来传递值的呢?通过Intent类提供的setData()和putExtra()方法传递。前一个参数是uri,是个标识比如一个文件的路径等。后一个参数可以是值也可以是对象,以键值对的形式传递。 ActivityA:Intent intent=new Intent(); intent.setClass(ActivityA.this,ActivityB.class); intent.putExtra("extra ", "Welcome to ..."); startActivity(intent);ActivityB:Intent intent=getIntent(); String stringValue=intent.getStringExtra("extra");如果把stringValue的值改变,ActivityA中extra所对应的值不会变。 intent.setClass(ActivityA.this,ActivityB.class); Student s=new Student("shao",20); intent.putSerializable("STUDENT ", s);startActivity(intent);ActivityB:Intent intent=getIntent();Student s=intent.getSerializable("STUDENT");现在如果把ActivityB中得到的Student对象s ,改变一个值,如s.setName("yang");那么ActivityA里的s会变吗?不会变,因为intent传递对象时,传递的是一个副本(深拷贝)。 所以在android中,intent进行数据传递时,基本数据类型和对象传递的都是副本,改变传递过来的值,不会改变原来的值。注意的是在进行对象传递的时候,该对象所对应的类要实现Serializable接口或Parcelable接口。
⑦ android intent 传递
getApplicationContext()
这个返回的是Application实例
你应该换成你的类名.this
另外two_btn.class,这个two_btn是Activity吗,有没有到manifest注册
⑧ Android Intent的作用,哪些类型的数据可以被传递
(1) 要激活一个新的Activity,或者让一个现有的Activity执行新的操作,可以通过调用Context.startActivity()或者Activity.startActivityForResult()方法。这两个方法需要传入的Intent参数也称为Activity Action Intent(活动行为意图),根据Intent对象对目标Activity描述的不同,来启动与之相匹配的Activity或传递信息。
(2) 要启动一个新的服务,或者向一个已有的服务传递新的指令,调用Context.startService()方法或调用Context.bindService()方法将调用此方法的上下文对象与Service绑定。
Intent一旦发出,Android都会准确找到相匹配的一个或多个Activity、Service或Broadcast-Receiver作为响应。所以,不同类型的Intent消息不会出现重叠:BroadcastIntent消息只会发送给BroadcastReceiver,而绝不可能发送给Activity或Service。由startActivity()传递的消息也只可能发送给Activity,由startService()传递的Intent只可能发送给Service。
向下一个Activity传递数据(使用Bundle和Intent.putExtras)
Intent it = new Intent(Activity1.this, Activity2.class);
Bundle bundle=new Intent();
bundle.putString("name", "This is from MainActivity!");
it.putExtras("bd",bundle); // it.putExtra(“test”, "shuju”);
startActivity(it); // startActivityForResult(it,REQUEST_CODE);