备注:此备注将会存在本人的每一条博客,将会定期更改
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 作用具体我也不是很十分清楚,是我的一个疑点
在这里插入了一张图片,不知道能不能行