1、使用Intent进行Activity传值
1)使用setClass方法来制定我们要跳转的Activity
Intent intent=new Intent(this,SecondActivity.class);
intent.putExtra(key,value);
startActivity(intent);
//或者
Intent intent=new Intent();
intent.setClass(MainActivity.this,SecondActivity.class);
intent.putExtra(key,value);
startActivity(intent);
2)使用setAction方法来完成跳转Activity
Intent intent = new Intent();
intent.setAction("com.example.android_intent.second");
intent.putExtra(key,value);
startActivity(intent);
注意必须在mainfest.xml文件中的SecondActivity中设置action
<activity
android:name="com.example.activitytest.SecondActivity"
android:label="SecondActivity">
<intent-filter>
<action android:name="com.example.android_intent.second"/>
<category android:name="android.intent.category.DEFAULT"/>//切记是default
</intent-filter>
</activity>
2、使用本地存储SharedPreferences、SQLite、Content Provider和File进行Activity传值
3、使用回调CallBack
4、使用EventBus
5、使用startActivityForResult()、onActivityResult()、setResult()方法进行传递和返回值
一、A Activity-->B Activity=======>返回值给A Activity
1)在第一个Activity中使用startActivityForResult()方法进行跳转,使用onActivityResult()进行接收
private int REQUEST_GET_NAME=0;
@Override
public void onClick(View view) {
// Intent intent=new Intent();
// intent.setClass(MainActivity.this,SecondActivity.class);
// startActivity(intent);
Intent intent=new Intent(this,SecondActivity.class);
//第一个参数是Intent对象,
//第二个requestCode指定我们的一个启动标志值,因为我们可能有多个按钮,如果都是跳转到同一个
//Activity对象上,
//我们需要对其进行标志,才知道是哪个Activity对象跳转过来的。
startActivityForResult(intent,REQUEST_GET_NAME);
-----------------------------------------------------------------------------------------
/**
* 所有的Activity对象的返回值都是由这个方法来接收
* requestCode If >= 0, this code will be returned in onActivityResult() when the activity exits.
* @param requestCode 表示的是启动一个Activity时传过去的requestCode值
* @param resultCode 表示的是启动后的Activity回传值时的resultCode值
* @param data 表示的是启动后的Activity回传过来的Intent对象
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==REQUEST_GET_TIME&&resultCode==RESULT_OK){
textView.setText(data.getStringExtra("name"));
}
}
2)在第二个页面中使用setResult()方法
Intent intent=new Intent();
intent.putExtra("name",""小明);
setResult(RESULT_OK,intent);
this.finish();
二、A Activity页面中多个点击事件跳转各个Activity,并相应给A Activity返回信息
1)、A Activity多个点击事件跳转对应的页面
private static final int REQUEST_GET_SEX = 1;
private static final int REQUEST_GET_NAME = 2;
binding.tvSecond.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, SecondActivity.class);//第二个页面
startActivityForResult(intent, REQUEST_GET_SEX);
}
});
binding.tvThree.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, ThreeActivity.class);//第三个页面
startActivityForResult(intent, REQUEST_GET_NAME);
// startActivity(intent);
}
});
2)接收返回值得方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 1:
if (resultCode == 1) {
Toast.makeText(context, "性别::" + data.getStringExtra("sex"), Toast.LENGTH_SHORT).show();
}
break;
case 2:
if (resultCode == RESULT_OK) {
Toast.makeText(context, "姓名::" + data.getStringExtra("name"), Toast.LENGTH_SHORT).show();
}
break;
}
}
3)对应各个页面的方法
binding.sex.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(SecondActivity.this, MainActivity.class);
intent.putExtra("sex", "男");
setResult(1, intent);
finish();
}
});
binding.back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ThreeActivity.this, MainActivity.class);
intent.putExtra("name", "麻子");
setResult(RESULT_OK, intent);//使用系统自带或者自定义resultCode都行
finish();
}
});