android 获取返回,Android通信组件机制–Intent的初步认识之获取Activity返回值 ? And......

在之前的例子中,通过使用startActivity(Intent)方法启动了Activity,启动之后的两个Activity相互独立没有任何的关联。但是在很多时候,启动后一个Activity是为了让用户有进一步的操作或者有某些特别的选择,那么在关闭这个Activity后,用户的选择信息要返回给原来的那个Activity,即后启动的子Activity的部分信息要返回给父Activity。这个操作可以分为以下三个步骤:

启动子Activity

设置子Activity的返回值

在父Activity中获取返回值

第一步:启动子Activity的方法在这里不是用startActivity(Intent),而是需要调用startActivityForResult(Intent,requestCode)函数,其中参数Intent用来决定启动哪个Activity,参数requestCode是唯一标识子Activity的请求码。因为一个父Activity可能有多个子Activity,而当子Activity返回时,父Activity都要调用相同的处理函数,而这时我们就要用一个标识来告诉父Activity返回的是哪个子Activity进而完成相对应的动作。例如:

[code lang="java"]

int SUBACTIVITY1=1;

Intent intent=new Intent(ActivityIntent.this,SubActivity1.class);

startActivityForResult(intent,SUBACTIVITY1);

[/code]

第二步:在子Activity中调用setResult()函数就能将所需的数据返回给父Activity。这个函数有两个参数,一个是结果码,一个是返回值,下例中RESULT_OK就是结果码用来表示子Activity的返回状态(结果码都为整数类型);另一个参数result是返回值,数据主要以Uri形式提供返回给父Activity,这个例子中我们把从EditText的控件中得到的值通过Intent返回给父Activity。

[code lang="java"]

String uriString = editText.getText().toString();

Uri data = Uri.parse(uriString);

Intent result=new Intent(null,data);

setResult(RESULT_OK,result);

finish();

[/code]

第三步:当关闭子Activity时,就会启动他的父Activity的startActivityResult()。代码中首先对结果码进行判断,如果返回值是RESULT_OK则通过getData()函数获取Intent中的Uri数据,否则不进行操作。

[code lang="java"]

private static final int SUBACTIVITY1=1;

private static final int SUBACTIVITY2=2;

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

// TODO Auto-generated method stub

super.onActivityResult(requestCode, resultCode, data);

//其中第一个参数表示是哪一个子Activity的返回值,第二个参数用来表示子Activity的返回状态,第三个参数是返回数据,返回数据类型为Intent

switch(requestCode){

case SUBACTIVITY1:

if(resultCode == RESULT_OK){

Uri uriData=data.getData();

textView.setText(uriData.toString());

}

break;

case SUBACTIVITY2:

break;

}

[/code]

例子中父Activity如下:

31351785_1.png

子SubActivity1如下:

31351785_2.png

这个例子中在子SubActivity中提供了一个输入框以及“接受”和“取消”两个按钮,如果在输入框中输入信息后单击“接受”按钮,程序会把输入框中的信息传递给其父Activity,而如果单击“取消”按钮,则程序不会向其父Activity传递任何信息。

实现方法如下:(分别为两个按钮创建点击事件,点击“接受”按钮时将EditText控件的内容作为数据保存在Uri中,并用这个Uri构造Intent,将Intent作为返回值,RESULT_OK作为结果码,通过调用setResult()函数将返回值和结果码传递给父Activity,最后用finish()函数关闭当前的子Activity;点击“取消”按钮时,RESULT_CANCEL作为结果码,而null作为返回值,说明程序不会向父Activity传递任何信息)

[code lang="java"]

class ButtonListener implements OnClickListener{

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

final EditText editText = (EditText)findViewById(R.id.edit);

String str = editText.getText().toString();

Uri data = Uri.parse(str);

Intent result=new Intent(null,data);

setResult(RESULT_OK,result);

finish();

}

}

class ButtonListener2 implements OnClickListener{

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

setResult(RESULT_CANCELED,null);

finish();

}

}

[/code]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值