Android之数据传递

在这里插入图片描述在这里插入图片描述
例子:主页面和子页面之间传值
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()的参数值改变,只能取到空数据,因为主页面取的键和子页面传的键不一样不一致,主页面取不到对应的值,两者必须一致才能传输到正确的值。
在这里插入图片描述

发布了18 篇原创文章 · 获赞 8 · 访问量 2296

猜你喜欢

转载自blog.csdn.net/qq_18625571/article/details/104790624
今日推荐