分享

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

 昵称11482448 2013-04-02


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

  1. 启动子Activity
  2. 设置子Activity的返回值
  3. 在父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如下:

子SubActivity1如下:

这个例子中在子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]


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多