1.在FirstActivity的布局中添加控件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.firstactivitya.FirstActivity">
<Button
android:id="@+id/goto_second_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="to SecondActivity"/>
</LinearLayout>
2.修改FirstActivity中的代码:
public class FirstActivity extends AppCompatActivity {
private Button gotoSecondBtn;
private static final String TAG = "FirstActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
gotoSecondBtn = findViewById(R.id.goto_second_btn);
//对按钮进行监听
gotoSecondBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//使用intent进行跳转
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
//启动跳转,这里使用startActivityForResult()方法,这个方法会在跳转到的活动页面销毁时,返回一个数据给上一个活动
/**
* param1:intent
* param2:请求码,用于回调时判断数据的来源
*/
startActivityForResult(intent, 1);
}
});
}
}
3.在SecondActivity中发送消息:
public class SecondActivity extends AppCompatActivity {
private Button secondBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
secondBtn = findViewById(R.id.second_btn);
secondBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//创建Intent对象
Intent intent = new Intent();
//通过put()以键值对的方式赋值
intent.putExtra("hi", "hi FirstActivity");
//通过setResult()方法向上一个活动返回结果 param1:处理结果代号
setResult(1, intent);
finish();
}
});
}
}
4.最后在FirstActivity复写onActivityResult()接收消息:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e(TAG, "onActivityResult1: "+data );
switch (resultCode) {
//下面的1为startActivityForResult(intent, 1);中的1
case 1:
//这里的1为setResult(1, intent);中的1
if (resultCode==1){
String str = data.getStringExtra("hello");
Log.e(TAG, "onActivityResult2: "+str );
String str2 = data.getStringExtra("hi");
Log.e(TAG, "onActivityResult3: "+str2 );
}
break;
default:
break;
}
}
}
OK,这样就可以实现传值了,不过你可能又要问了,String str = data.getStringExtra(“hello”);从哪来的,这是我下面要写的代码,在SecondActivity中添加:
@Override
public void onBackPressed() {
// super.onBackPressed();
Intent intent = new Intent();
intent.putExtra("hello","Hello FirstActivity");
setResult(1,intent);
finish();
}
可以实现不用点击按钮而是点击返回键就可以返回数据,仔细看我的代码,可以看到,我将// super.onBackPressed();注释掉了,这是因为如果不注释,他就会调用onBackPressed()默认的处理方法,就不能实现返回数据给上一个活动了,这是我犯的错误,当然可以使用以前的方法对返回按钮进行监听:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent intent = new Intent();
intent.putExtra("hello", "Hello FirstActivity");
setResult(1, intent);
finish();
}
return super.onKeyDown(keyCode, event);
}
最后可以看一下运行效果: