父向子
看到一个十分形象的比喻,要传送的数据是就是你在淘宝买的一个具体商品,商品从商家到你这就是页面跳转传参数(商品是参数)。然后商家就会把商品放进盒子,发快递给你。而装商品的盒子就是Bundle,Intent就是快递员。需要用Bundle封装数据,借Intent传送数据集。
Intent传值
第一个界面发送数据
Intent intent=new Intent(MainActivity.this,Address.class);
intent.putExtra("integer",5);
intent.putExtra("double",2.55);
intent.putExtra("string","test");
第二个界面接收数据
Intent intent=getIntent();
Integer driverid=intent.getIntExtra("driverid",0);
double finalMoney1= intent.getDoubleExtra("money",0);
String string=intent.getStringExtra("string");
通过Bundle
第一个界面发送数据:
Intent intent=new Intent(MainActivity.this,Address.class);
Bundle bundle=new Bundle();
bundle.putCharSequence("name","test");
bundle.putInt("Int",2);
bundle.putDouble("double1",2.257);
bundle.putString("string","main");
intent.putExtras(bundle);
第二个界面接收数据
Intent intent1=getIntent();
Bundle bundle1=intent1.getExtras();
String name=bundle1.getString("name");
int Int=bundle1.getInt("Int");
double double1=bundle1.getDouble("double1",0);//第二值是默认值
String string=bundle1.getString("string");
<-------------------------------->
子向父
看个例子
我们构造两个界面,为main和testbababa,界面都很简单,
主界面:子界面:
把正常跳转的startActivity(intent)改成startActivityForResult(intent,100);这个100是一个请求码,用于区别,可能这个main界面会向好几个其他子界面发送请求,为了在 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)函数加以区分,所写的。那么这个函数又是干什么的,这个函数是子活动结束后,主活动进行响应的重载函数。
在子活动当中,通过intent进行返回,调用 setResult(1, intent);函数。这个1是响应码,因为可能子活动会在不同的情况下进行不同的传参,在onActivityResult()函数中进行区分。
在看看onActivityResult()的三个参数
第一个int requestCode:父向子的请求码
第二个 int resultCode:子向父的响应码
第三个 @Nullable Intent data:子向父返回的intent对象。
看看主程序代码
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button button;
TextView ed1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=findViewById(R.id.btn);
ed1=findViewById(R.id.et1);
button.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Intent intent=new Intent();
intent.setClass(this,testbababa.class);
intent.putExtra("father",ed1.getText());
/**
/*
/*这里改成 startActivityForResult(intent,100);
*/
startActivityForResult(intent,100);
}
/**
/*
/*重写 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)函数
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode!=100)
return;
if(resultCode!=1)
return;
ed1.setText(data.getStringExtra("son"));
}
}
子程序代码
public class testbababa extends AppCompatActivity {
TextView tv1;
TextView tv2;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
tv1 = findViewById(R.id.ed2);
tv2 = findViewById(R.id.tv);
button = findViewById(R.id.btn1);
Intent intent = getIntent();
String string = intent.getStringExtra("father");
tv1.setText(string);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.putExtra("son", tv2.getText());
setResult(1, intent);
finish();
}
});
}
}
eg:要子活动给父活动响应参数,一定要子活动结束,才会触发。