android回传值,Android Activity 回传值

本文探讨了如何在Android应用中通过startActivityForResult()与onActivityResult()方法实现Activity之间的数据传递,以及onNewIntent()的使用。重点在于两种方式的区别,以及为何不能使用singleTask启动Activity B。同时分享了作者在实际操作中的心得和遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一下Activity往上级回传值的一些心得,及疑问。

需求: Activity A -> Activity B,并把一个Object instance(p) 传给B,Activity B 中,p的一些数据会实时更新,当用户返回A 时,需要把p带回给A,

方法 1  startActivityForResult()

A 中:

Intent intent = new Intent(this, B.class);

intent.putExtra("key",value);

startActivityForResult(intent,Request_Code);

*注意: Activity B 不能用 (singleTask)启动,不然A会直接受到Result_Cancel,从而无法有返回值。

A中加入callback method: onActivityResult(),需要对requestCode and resulteCode 进行判断。

@Overrideprotected void onActivityResult(int requestCode, intresultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);

switch(resultCode){

case Activity.RESULT_CANCELED:{}

case Activity.RESULT_OK: {

if (requestCode==Request_Code){

P p = data.getParcelableExtra("panel");

}

}

default: ...

}

}

Activity B 中:设置给activity左上角的

public booleanonOptionsItemSelected(MenuItem item) {//Handle item selection

switch(item.getItemId()) {caseandroid.R.id.home:

Intent intent= NavUtils.getParentActivityIntent(this);   //get inent

intent.putExtra("key",p);                     //put in p instance

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);       //set intent flag

setResult(Activity.RESULT_OK,intent);             //set resultCode and intent

finish();return true;default: return super.onOptionsItemSelected(item);

}

}

这样按下返回Home或Back后,会调用 A中 的onResultActivity() callback, A就能接收到 p (implements Parcable)

方法2: 用onNewIntent(),不需要检测request_code 和result_code

A 中: startActivity(intent, B.class);

并添加callback  onNewIntent()

@Overrideprotected voidonNewIntent(Intent intent) {

setIntent(intent);

Intent newIntent=getIntent();

...super.onNewIntent(intent);

}

B 中:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

intent.putExtra(...);

NavUnit.navigateUpTo(this,intent);

A会得到一个新的intent。

总结: startActivity() 和 startActivityForResult() 都可以得到得到回传值,但回传之后的callback 不同,前者用onNewIntent(),后者用onResultActivity()。后者可以用requestCode来控制不同的传递,用resultCode来表示状态。

原文:http://www.cnblogs.com/weiyuanzhu/p/4113932.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值