android: startActivityForResult用法(启动其他Activity并返回结果)
来源:互联网 发布:驱动精灵linux版 编辑:程序博客网 时间:2024/05/20 20:03
startActivityForResult:该方法用于启动指定Activity,而且期望获取指定Activity返回的结果。
例如应用程序第一个界面需要用户进行选择,但是这种选择的列表数据很复杂,需要启动另一个Activity让用户选择。当用户在第二个Activity中选择完后程序返回第一个Activity,此时第一个Activity必须获取并显示用户在第二个Activity中选择的结果。
为了获取被启动的Activity所返回的结果,需要从两方面入手:
1.当前Activity(主)需要重写onActivityResult(int requestCode ,int resultCode ,Intent intent),当被启动的Activity返回时,这个方法会被触发。(第一个参数代表请求码,第二个参数代表Activity返回的结果码,这个结果码由开发者自行设置)
2.使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity
3.被启动的Activity(新)需要调用setResult()方法设置处理结果
例:
//主Activity
public class MainActivity extends Activity {
private final static String TAG="MainActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button bt=(Button)this.findViewById(R.id.bt);
bt.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
//启动指定的Activity并等待返回的结果
//第二个参数为请求码,可以根据业务需求自己编号
startActivityForResult(new Intent(MainActivity.this, OtherActivity.class), 1);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//处理特定的数据结果
if(requestCode == 1 && resultCode == 1)
{
//可以利用Bundle进行数据交换
......
}
}
}
//新Activity
public class OtherActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
Button bt=(Button)findViewById(R.id.bt);
bt.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
//数据是使用Intent返回
Intent intent = new Intent();
//把返回数据存入Intent
intent.putExtra(String name, Xxx value);//按key-value对的形式存入数据
//设置返回数据
OtherActivity.this.setResult(RESULT_OK, intent);
//关闭Activity
OtherActivity.this.finish();
}
});
}
}//注:上述代码只是示范使用startActivityForResult()的步骤,并不能在虚拟机上运行!!!
使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityForResult()方法传入一个请求码(第二个参数)。请求码的值是根据业务需要由自已设定,用于标识请求来源。
在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法,这里就需要使用到结果码。
例:
public void onCreate(Bundle savedInstanceState) {
....
button1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
startActivityForResult (new Intent(MainActivity.this, ActivityOne.class), 1);
}
});
button2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
startActivityForResult (new Intent(MainActivity.this, ActivityTwo.class), 2);
}
});
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == ...&& resultCode == ...)
{
........
//处理特定的请求
}
}
}
public class ActivityOne extends Activity {
.....
ActivityOne.this.setResult(1, intent);
ActivityOne.this.finish();
}
public class ActivityTwo extends Activity {
......
ActivityTwo .this.setResult(2, intent);
ActivityTwo .this.finish();
}
- android: startActivityForResult用法(启动其他Activity并返回结果)
- Android 启动其他Activity并返回结果
- 【Android】启动其他Activity并返回结果
- startActivityForResult启动另一个Activity并返回结果
- Android中启动其他Activity并返回结果
- Android中启动其他Activity并返回结果
- 启动其他Activity并返回结果
- 启动其他的Activity并返回结果
- 启动其他Activity并返回结果
- 启动其他Activity并返回结果
- Android 启动另外activity并返回结果
- Android--启动另一个Activity并返回结果
- Intent和bundle 启动其他Activity并返回结果
- 启动其他Activity的Fragment并返回结果
- Android Activity返回结果startActivityForResult函数
- Android Activity返回结果startActivityForResult函数
- 启动Activity并返回结果
- Activity经典实例:启动其他Activity并使用Bundle存储数组返回结果
- Python入门
- Java并发编程:Timer和TimerTask
- java.sql.SQLException:IO异常:Connection reset...........
- 原生JavaScript实现观察者模式
- struts2整理1
- android: startActivityForResult用法(启动其他Activity并返回结果)
- Java:类与继承
- postman删除单个对象流程之一
- jfinal--乱码问题
- 微信游戏3
- AF 对焦分析
- pandas
- Java中将String转换为字节数组的3种方式
- Android Studio代码调试