例子:主页面和子页面之间传值
parent.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="parentClick"
android:text="parent to child" />
</LinearLayout>
child.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Activity_child">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="childClick"
android:text="child to parent" />
</LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
final static int RQC = 1;
final static int RSC = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.parent);
Log.v("test", "MainActivity onCreate()");
}
public void parentClick(View view) {
Log.v("test", "MainActivity Click会调用startActivityForResult()");
Intent intent = new Intent(this, Activity_child.class);
startActivityForResult(intent, RQC);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RQC) {
if (resultCode == RSC) {
String string = data.getStringExtra("extra_data");
Log.v("test", "获取的位置模拟数据为:" + string);
}
}
}
@Override
protected void onStart() {
super.onStart();
Log.v("test", "MainActivity onStart()方法");
}
@Override
protected void onResume() {
super.onResume();
Log.v("test", "MainActivity onResume()方法");
}
@Override
protected void onRestart() {
super.onRestart();
Log.v("test", "MainActivity onRestart()方法");
}
@Override
protected void onStop() {
super.onStop();
Log.v("test", "MainActivity onStop()方法");
}
@Override
protected void onPause() {
super.onPause();
Log.v("test", "MainActivity onPause()方法");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.v("test", "MainActivity onDestroy()方法");
}
}
Acyicity_child.java
public class Activity_child extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.child);
Log.v("test", "Activity_child 调用onCreate()");
}
public void childClick(View view) {
Log.v("test", "Activity_child Click会调用startActivityForResult()");
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("extra_data", "Activity_child获取的位置模拟数据");
setResult(RSC, intent);
finish(); // 执行后会关闭此 Activity ,并且走如下流程: onPause(),onStop(),onDestory()
}
@Override
protected void onStart() {
super.onStart();
Log.v("test", "Activity_child onStart()方法 ");
}
@Override
protected void onResume() {
super.onResume();
Log.v("test", "Activity_child onResume()方法 ");
}
@Override
protected void onRestart() {
super.onRestart();
Log.v("test", "Activity_child onRestart()方 法");
}
@Override
protected void onStop() {
super.onStop();
Log.v("test", "Activity_child onStop()方法");
}
@Override
protected void onPause() {
super.onPause();
Log.v("test", "Activity_child onPause()方法");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.v("test", "Activity_child onDestroy()方法 ");
}
}
结果
注意
1.当把Activity_child.java中childClick()的finish()换成startActivityForResult(intent, 1),那么数据传递失败,因为finish()是用来最后传递数据并且用来摧毁当前Activity的,而startActivityForResult()则用于接收数据,启动Activity。
2.当把MainActivity.java中onActivityResult()的判断语句的requestCode值改变,依旧不能传输数据,因为请求码不同,请求码需要相同才能传输。
3.当把MainActivity.java中onActivityResult()的判断语句的resultCode值改变,依旧不能传输数据,因为主页面接收的结果码和子页面返回的结果码不一致,两者必须一致才能传输。
4.当把MainActivity.java中onActivityResult()的getStringExtra()的参数值改变,只能取到空数据,因为主页面取的键和子页面传的键不一样不一致,主页面取不到对应的值,两者必须一致才能传输到正确的值。