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();
}







原创粉丝点击