目录
作用和用法
请求码和结果码
用set.Result()设置结果码 一般在新act设置
用startActivityForResult()设置请求码 一般在原act设置
请求码是用来标识请求源的(是哪个intent),结果码是用来标识结果源的(从哪个act返回)。
在void onActivityResult()中处理结果码和请求码
{
请求码用于判断从哪个act返回
结果码用于判断哪个act返回的数据
}
Bundle
用来存放数据信息,而bundle是放在intent里,通过intent来传输数据
一般用 bundle.putString(key,value); bundle.putInt(key,value);(以此类推)存放信息
用 intent.putExtra(key,bundle);把bundle放入intent中,
用 Bundle bundle = intent.getBundleExtra(key); 取出bundle,
用bundle.getString(key) (以此类推)取出bundle中的数据
代码实例
在原act中为某一个意图设置请求码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivityForResult(intent,2); //请求码为2
}
});
在新的act设置结果码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent intent = new Intent();
setResult(2,intent);
}
在原act处理请求码和结果码
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
//当从别的页面返回时,会识别请求码,和结果码
Toast.makeText(this, //判断是哪个act返回,使用请求码
"从第"+requestCode+"个 activity 返回",
Toast.LENGTH_LONG).show();
if (resultCode == 3){
//判断是哪个act返回的数据,使用结果码
String string = intent.getStringExtra("第三个页面的数据");
Toast.makeText(this,string,Toast.LENGTH_SHORT).show();
}else if (resultCode == 2){
Toast.makeText(this, "第二个页面无数据", Toast.LENGTH_SHORT).show();
}
}
}
Bundle实例化以及存放数据
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Bundle bundle = new Bundle(); //相当于信息载体
bundle.putString("name","张三"); //键值对数据存入Bundle对象
bundle.putInt("age",20);
intent.putExtra("data",bundle); //通过intent对象携带bundle数据
startActivityForResult(intent,3); //请求码为3
}
});
取出bundle和bundle数据
public class ThirdActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
String receiver = "接收的数据如下:\n";
Intent intent = getIntent(); //获得启动当前活动时的Intent内容。
Bundle bundleData = intent.getBundleExtra("data"); //获取捆绑数据
receiver += "name:" + bundleData.getString("name") + "\n";
receiver += "age:" + bundleData.getInt("age");
Toast.makeText(this, receiver, Toast.LENGTH_LONG).show();
intent = new Intent();
intent.putExtra("第三个页面的数据","how are you?"); //携带为捆绑的数据
setResult(3,intent); //结果码为3
}
}