Activity间的数据传递与回传

备注:此备注将会存在本人的每一条博客,将会定期更改
1、使用的软件是Android studio 版本是3.4.2
2、开始学习安卓时间:2019/08/01
3、由于是自学,所以我不一定是对的,请保持一定的怀疑态度。

一、Activity间的数据传递
首先,创建两个Activity: MainActivity、Main2Activity
打开程序后,显示MainActivity , 点击Button 按钮后跳转到 Main2Activity ,同时传递一些数据过去
就不放两个Activity的 xml 的代码了,拉一个按钮和几个textviwe放数据就行

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button btn1 = (Button) findViewById(R.id.btn_go_avtivity2);

    btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent intent = new Intent(MainActivity.this,Main2Activity.class);

            //传递一个对象
            UserInfo userinfo = new UserInfo();
            userinfo.userName="aer";
            userinfo.age=22;
            userinfo.gender=0;
            intent.putExtra("userInfo",userinfo);

            intent.putExtra("ex1","传过来的人物信息如下:");

            startActivityForResult(intent,100);
        }
    });
}

// onActivityResult可以接收传过来的数据

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
   

    //两个textview控件
    TextView paramsTextView1 = (TextView) findViewById(R.id.tv_reception);
    TextView paramsTextView2 = (TextView) findViewById(R.id.tv_reception2);
    
    //传过来的字符串,放进 paramsTextView1
    String backData = data.getStringExtra("back_data");
    paramsTextView1.setText(backData);
    //传过来的对象数据,放进 paramsTextView2
    UserInfo userinfo12 =(UserInfo) data.getSerializableExtra("back_UserInfo");
    paramsTextView2.setText("姓名:"+userinfo12.userName+",年龄"+userinfo12.age+",性别:"+userinfo12.gender);

}

}

这是用来传递数据的对象,对象需要继承Serializable 类 java序列化应该有学过吧
当然,也可以继承Parceable 就比较麻烦,我也没学会呢

import java.io.Serializable;

public class UserInfo implements Serializable {

    public String userName;

    public int age;

    public int gender;

}

MainActivity的代码如上,从Main2Activity回传的数据要在重写的onActivityResult里面接收
需要注意的是打开方式,一般使用 startActivity(intent); 打开一个新Activity ,但是由于要向打开的Activity传递数据,所以我的打开方式是 startActivityForResult(intent,100); 第二个参数100是requestCode的值,具体作用可以另行查找。

Main2Activity代码如下:

public class Main2Activity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);


    TextView paramsTextView1 = (TextView) findViewById(R.id.tv_params);
    TextView paramsTextView2 = (TextView) findViewById(R.id.tv_params2);
    TextView paramsTextView3 = (TextView) findViewById(R.id.tv_params3);

    Intent intent = new Intent();
    intent.putExtra("back_data","这是一段回传的数据");
    setResult(RESULT_OK,intent);            //RESULT_OK  =  -1

    //接收数据

    String newtext = getIntent().getStringExtra("ex1");
    paramsTextView1.setText(newtext);

    UserInfo userinfo = (UserInfo) getIntent().getSerializableExtra("userInfo");
    paramsTextView2.setText("姓名:"+userinfo.userName+",年龄"+userinfo.age+",性别:"+userinfo.gender);

    //更改传过来的信息,并尝试在页面关闭时传回给MainActivity

    userinfo.age=55;

    Intent intent2 = new Intent();
    intent2.putExtra("back_UserInfo",userinfo);
    setResult(RESULT_OK,intent2);

}

}

接收了来自MainActivity的数据,同时在关闭本Activity的时候,会回传数据给MainActivity

(备注:修改时间2019/8/19){
此处的Main2Activity,在打开窗口的时候,就已经接接收了数据,并马上修改后传递了数据,并不是关闭的时候才回传。
如果要设置关闭之后再回传数据,要重写onBackPressed()方法,在里面写入代码,添加返回数据的逻辑。

}

此处的最后一行 setResult(RESULT_OK,intent2);
这个RESULT_OK 作用具体我也不是很十分清楚,是我的一个疑点

在这里插入了一张图片,不知道能不能行
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值