您的位置:首页 > 移动开发 > Android开发

android学习笔记18 - activity反馈:startActivityForResult、setResut和onActivityResult

2015-11-30 14:14 387 查看
Activity反馈:Activity关闭后,反馈信息给之前打开这个Activity的Activity。

以A打开B,B关闭后反馈给A为例进行说明。需要用到以下方法:

startActivityForResult(Intent intent, Int
requestCode)

A需要通过这个方法打开B,其中intent为当前intent,请求码requestCode用于标志请求来源。比如requestCode用于匹配一个A打开复数B的标志,比如A打开B1设定requestCode为1,打开B2设定requestCode为2。操作如下:

public void onClick(View v)
{
if(v.getId()==R.id.b1)
{
Intent intent = new Intent("CCBCScript");
Bundle bundle = new Bundle();
bundle.putString("CallStr", "LaunchApp");
intent.putExtras(bundle);
startActivityForResult(intent,1);
return;
}
if(v.getId()==R.id.b2)
{
String count=e1.getText().toString();
Intent intent = new Intent("CCBCScript");
Bundle bundle = new Bundle();
bundle.putString("count", count);
bundle.putString("CallStr", "消费");
intent.putExtras(bundle);
startActivityForResult(intent,2);
return;
}
}


setResut(int resultCode, Intent intent)

当B关闭后,要将数据进行反馈,需要调用setResult。调用setResult的时机是调用finish之前。结束码resultCode用于标志结束信息的来源。操作如下:

public void finish(int resultCode, String ReturnStr)
{
Bundle bundle=new Bundle();
if(ReturnStr!=null&&ReturnStr.length()>0)
{
bundle.putString("ReturnStr",ReturnStr);
}
Intent intent=new Intent();
intent.putExtras(bundle);
setResult(resultCode, intent);
finish();
}


onActivityResult(int requestCode, int resultCode, Intent intent)

A通过这个方法处理之前打开的一系列B1、B2、B3......intent可以用于处理intent打包信息,resultCode用于标志不同的B,这个B可以是相同的activity,也可以是不同的activity。requestcode标志同一个A不同位置调用的B,可以用来区分不同地方的调用。

protected voidonActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode){
case 1:
//来自按钮1的请求,作相应业务处理
switch(resultCode){
case 1:
// B1的返回数据
case 2:
// B2的返回数据
}
case 2:
//来自按钮2的请求,作相应业务处理
switch(resultCode){
case 1:
// B1的返回数据
case 2:
// B2的返回数据
}
}
}
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: