通信组件——Intent简单使用(二)(获取Activity返回值)
上次示例中,通过使用startActivity(Intent)方法启动Activity后,启动后的两个Activity之间相互独立,没有任何的关联,在很多情况下,后启动的Activity是为了让用户对特定信息进行选择,在关闭这个Activity后,用户的选择信息需要返回给未关闭的那个Activity
按照Activity启动的先后顺序,先启动的称为父Activity,后启动的称为子Activity
如果需要将子Activity的部分信息返回给父Activity,则可以使用Sub-Activity的方式去启动子Activity
接着让我们来学习一下如何获取子Activity的返回值,一般可以分为以下三个步骤:
一、以Sub-Activity的方式启动子Activity
二、设置子Activity的返回值
三、在父Activity中获取返回值
一、以Sub-Activity的方式启动子Activity需要调用函数startActivityForResult(Intent, requestCode) ;
(注:函数参数Intent用于决定启动哪个Activity,参数requestCode是唯一的标识子Activity的请求码)
显示启动子Activity:
int SUBACTIVITY1 = 1;
Intent intent = new Intent(this, SubActivity1.class);
startActivityForResult(intent, SUBACTIVITY1);
隐式启动子Activity:
int SUBACTIVITY2 = 2;
Uri uri = Uri.parse("content://contacts/people");
Intent intent = new Intent(Intent.ACTION_PICK, uri);
startActivityForResult(intent, SUBACTIVITY2);
二、设置子Activity的返回值
调用setResult()函数将所需的数据返回给父Activity, setResult()函数有两个参数:结果码和返回值
(注:结果码表明了子Activity的返回状态,通常为Activity.RESULT_OK或者Activity.RESULT_CANCELED,结果码均为整数类型;返回值封装在Intent中,子Activity通过Intent将需要返回的数据传递给父Activity。数据主要是Uri形式,可以附加一些额外信息,这些额外信息用Extra的集合表示)
代码如下:
Uri data = Uri.parse("tel:" + tel_number);
Intent result = new Intent(null, data);
result.putExtra("address", " ");
setResult(RESULT_OK, result);
finish();
三、在父Activity中获取返回值
当子Activity关闭时,启动它的父Activity的onActivityResult()函数将被调用;如果需要在父Activity中处理子Activity的返回值,则重载此函数即可
函数用法:public void onActivityResult(int requestCode, int resultCode, Intent data);
(注: 参数requestCode,用来表示是哪一个子Activity的返回值
参数resultCode用于表示子Activity的返回状态
参数data是子Activity的返回数据,返回数据类型是Intent。)
好啦,接下来给出代码:
MainActivity.java:
private static final int SUBACTIVITY1 = 1;
private static final int SUBACTIVITY2 = 2;
TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.textShow);
final Button btn1 = (Button)findViewById(R.id.btn1);
final Button btn2 = (Button)findViewById(R.id.btn2);
btn1.setOnClickListener(new OnClickListener(){
public void onClick(View view){
Intent intent = new Intent(MainActivity.this, SubActivity1.class);
startActivityForResult(intent, SUBACTIVITY1);
}
});
public void onClick(View view){
Intent intent = new Intent(MainActivity.this, SubActivity2.class);
startActivityForResult(intent, SUBACTIVITY2);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode){
case SUBACTIVITY1:
if (resultCode == RESULT_OK){
Uri uriData = data.getData();
textView.setText(uriData.toString());
}
break;
case SUBACTIVITY2:
break;
}
}
}
SubActivity1.java:
public class SubActivity1 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.subactivity1);
final EditText editText = (EditText)findViewById(R.id.edit);
Button btnac = (Button)findViewById(R.id.btn_ac);
Button btnre = (Button)findViewById(R.id.btn_re);
btnac.setOnClickListener(new OnClickListener(){
public void onClick(View view){
String uriString = editText.getText().toString();
Uri data = Uri.parse(uriString);
Intent result = new Intent(null, data);
setResult(RESULT_OK, result);
finish();
}
});
btnre.setOnClickListener(new OnClickListener(){
public void onClick(View view){
setResult(RESULT_CANCELED, null);
finish();
}
});
}
}
SubActivity2.java:
public class SubActivity2 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.subactivity2);
Button btnReturn = (Button)findViewById(R.id.btn_return);
btnReturn.setOnClickListener(new OnClickListener(){
public void onClick(View view){
setResult(RESULT_CANCELED, null);
finish();
}
});
}
}
activity_main.xml:
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动Activity1" />
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动Activity2" />
android:id="@+id/textShow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
subactivity1.xml:
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SubActivity1" />
<EditText
android:id="@+id/edit"
android:layout_height="wrap_content"
android:layout_width="fill_parent"/>
android:id="@+id/btn_ac"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="接受" />
android:id="@+id/btn_re"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="撤销" />
subactivity2.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
android:id="@+id/btn_return"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回" />
效果:
希望可以帮助大家