Activity之间的通信
来源:互联网 发布:javascript基础单词 编辑:程序博客网 时间:2024/04/25 21:51
Activity之间的通信方式有两种,startActivity,startActivityForResult();
其中,startActivity()仅仅是跳转到目标界面,并且如果一个主Activity跳转到多个子Activity,数据的携带与传递,要用
startActivityForResult().
主要用到三个方法:startActivityForResult(),onActivityResult(),setResult().
先看看要实现的效果
思路
主Activity
@Override protected void onCreate() { initView();// UI initData();// 逻辑}
private void initData() { // 逻辑 confirmCode();//判断获取个人资料的code --- 获取到个人资料,显示在界面上 click();}private void click() { tv_edit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //向子Activity传递数据 Intent intent = new Intent(); intent.setClass(GetPersonalInfoActivity2.this, EditPersonalInfoActivity2.class); Bundle personInfoBundle = new Bundle(); personInfoBundle.putSerializable("personInfo",infoBean); intent.putExtras(personInfoBundle); startActivityForResult(intent,1); } });
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (resultCode){ case 2: if(data!=null) { //接受子Activity回传过来的数据 Bundle bundle = data.getExtras(); PersonalInfoBean.DataBean refreshInfo = (PersonalInfoBean.DataBean) bundle.getSerializable("refreshInfo"); //这是现实修改后的信息 tv_name.setText(refreshInfo.getUSER_NAME());//保存出错 就是提交不成功的意思 tv_gender.setText(refreshInfo.getSEX()); //tv_gender.setText(refreshInfo.getSEX().equals("0")?"男":"女"); tv_birth.setText(refreshInfo.getBIRTHDAY()); tv_tel.setText(refreshInfo.getMOBIL_NO()); tv_qq.setText(refreshInfo.getOICQ_NO()); tv_email.setText(refreshInfo.getEMAIL()); tv_work_tel.setText(refreshInfo.getTEL_NO_DEPT()); tv_home_tel.setText(refreshInfo.getTEL_NO_HOME()); tv_home_addr.setText(refreshInfo.getADD_HOME()); }子Activity
private void initData() { getAndSetData(); //获取从子Activity传递过来的信息,并把它显示在子Activity上面 click();}
private void getAndSetData() { Bundle personInfoBundle = getIntent().getExtras(); PersonalInfoBean.DataBean info = (PersonalInfoBean.DataBean) personInfoBundle.getSerializable("personInfo"); //getData user_id = CPGROUPOA.getApplication().getUSER_ID(); USER_NAME = info.getUSER_NAME(); //setData et_name.setText(USER_NAME);}
private void click() { tv_keep.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getData(); getDataFromServer();//修改个人信息,并传回后台数据库 overridePendingTransition(0, R.anim.slide_out_right); } });
private void getData() { USER_NAME = et_name.getText().toString();}
private void getDataFromServer() { ........ public void onResponse(EditPerInfoBean response) { switch (response.getCode()) { case "2251":// //从服务器返回的数据在OnResponse里面 changeInfo();//在服务器返回成功信息之后在做其他动作
private void changeInfo() { Bundle refreshInfobundle = new Bundle(); PersonalInfoBean.DataBean refreshInfo = new PersonalInfoBean.DataBean(); //开始组装成功之后的信息 修改的 USER_NAME = refreshInfo.setUSER_NAME(et_name.getText().toString()); ... ... ... ... ... ... ... ... //使用bundle运载信息(对象) refreshInfobundle.putSerializable("refreshInfo", refreshInfo); Intent intent = new Intent(); intent.putExtras(refreshInfobundle); setResult(2, intent);}注意:
两个错误:
1 子Activity中,getData()直接写在initData()里面,这样做,修改的数据是不会显示在主Activity中的,因为点击保存的时候,
根本没有走getData()和getDataFromServer()方法,只走的页面跳转的方法。所以要确保该走的逻辑,在自己的操作中,都走
一遍。把getData()和getDataFromServer()这两个方法写在点击事件里面。
private void initData() { getAndSetData(); //获取从子Activity传递过来的信息,并把它显示在子Activity上面 getData();//修改个人信息 getDataFromServer();//把修改后的信息传回后台数据库 click();//点击保存按钮,跳转回前一个界面}2 在主Activity里点击修改按钮,要么不跳转到子Activity,要么跳转到子Activity很快就自动跳转回主Activity
private void initData() { getAndSetData(); //获取从子Activity传递过来的信息,并把它显示在子Activity上面 getDataFromServer(); click();}
private void getDataFromServer() { ....... public void onResponse(EditPerInfoBean response) { switch (response.getCode()) { case "2251":// changeInfo();//应该在服务器返回成功信息之后在做其他动作 finish();// finish() break;原因:按照逻辑顺序,先走getDataFromServer(),再走click();而getDataFromServer里面有finish(),直接就把这个Activity给finish()了,所以不走click()方法。
这两个错误,错的逻辑都是一样的。都是因为逻辑的原因,有的方法没走到。在写程序的时候,要注意方法执行的顺序。确保每个方法都走到。
阅读全文
0 0
- Activity之间的通信
- Activity之间的通信
- Activity之间的通信
- Activity 之间的通信
- Activity之间的通信
- Activity之间的通信(Intent)
- activity之间数据的通信
- 关于Activity之间的通信
- Activity生命周期 与 Activity 之间的通信
- Activity与Activity之间的通信
- Android的Activity之间的通信
- Anrdoid的Activity之间的通信
- Android Activity和Service之间的通信
- Android Activity和Service之间的通信
- Activity和Service之间的通信
- Android Activity和Service之间的通信
- android activity与service之间的通信
- 详解Fragment跟Activity之间的通信
- iOS
- samba配置
- spring-boot入门需要了解的知识
- 关于Python绘图模块Turtle库详解
- getContextPath、getServletPath、getRequestURI的区别
- Activity之间的通信
- testData20171019
- 代码设置颜色
- [笔记]MySQL查询语法
- IDEA 常用快捷键
- springboot 打包jar
- django之url配置
- opencv识别物体上的黑色污点
- jQuery:unbind方法的使用详解