大家好,欢迎来到IT知识分享网。
上一篇文章写了数据传递,这篇level up,来到数据回传。
一、时序图
先来看一下数据回传的一张时序图。startActivityForResult()、setResult()、onActivityResult()三者缺一不可~
1.startActivityForResult()
在数据传递中,我们使用startActivity()来打开下一个页面。在数据回传中,我们要使用startActivityForResult()来打开下一个页面,它的作用是:从A页面使用该方法跳转到B页面,当B页面销毁时,会从销毁的B页面将数据传回到A页面(注意是原来的那个A页面,不是新的A页面)。
2.setResult()
将B页面的数据回传到A页面
3.onActivityResult()
A页面接收回传的信息
二、步骤
了解三个方法后,我们开始进入数据回传的步骤。(以Login页面和Register页面为例)
1.startActivityForResult()
(1)格式
startActivityForResult(Intent intent, int requestCode); //括号内有两个参数,第一个参数Intent表示意图对象, 第二个参数requestcode表示请求码,用于标识请求的来源。 //为何要用到请求码? //设想一下如果我们的Login页面有多个按钮的点击事件中都要跳转到Register页面, //那么多页面,该如何判断我们Login回收到的数据是从哪个按钮的点击事件从跳转过来的呢? //这时候就需要用请求码来标识我们的每个跳转按钮~这样才能清楚明白请求的来源
(2)例子
//设计一个Register的点击事件 Register.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //设置跳转到的Activity页面 Intent intent = new Intent(); intent.setClass(Login.this, Register.class); //用startActivityForResult()开启Register页面 startActivityForResult(intent, Register_RequestCode); } });
第一个步骤在Login页面完成√,接下来暂时让Login页面休息,来到Register页面
2.setResult()
(1)格式
setResult(int resultCode,Intent intent) //第一个参数是返回码,用于标识返回的数据来自哪一个Activity //第二个参数Intent用于携带数据并回传到上一个Activity
(2)例子
//还是用到了putextra()在Intent对象中存储数据 Intent intent=new Intent(); intent.putExtra("key",name.getText().toString()); //toString()不是必要的,但是如果是初学者的话建议都加上toString() //确保数据都转化成字符型 //name.getText()是从Register页面中获得到的数据 setResult(RESULT_OK,intent); finish(); //不要忘记用finish()销毁当前页面,这样才能回到原来的Login页面 //这里有个注意点,不要在finish前面加上页面跳转方法 //亲身经历,在做数据回传的时候,在finish前面加上了从Register跳转到Login, //导致我尝试了很多次数据一直回传不过去,原因在于我加上了页面跳转,Register跳转之后 //的Login页面是一个新页面,没办法获取到回传的数据。 //因为这个原因卡了我好久...脑袋晕晕QAQ
到这里,Register页面的任务已经完成,回到Login页面
3.onActivityResult()
Login接收从Register回传的数据
(1)格式
onActivityResult(int requestCode,int resultCode,Intent data)
(2)例子
//不要手敲这一长串,敲个onActivityResult找到以下格式 @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==Register_RequestCode){ if(resultCode==RESULT_OK){ String name1=data.getStringExtra("key"); Log.v("login","传递了name"+name);//打个log看看有没有获取到数据 Rev.setText(name1);//在Login页面中显示出获取到的数据 //Rev是绑定的控件名,是我们要显示出回收到的数据的输入框。 //所以记得要绑定!具体的在数据传递中有写 } } }
到这就结束啦
三、关于请求码和返回码
请求码和返回码我们都可以直接在格式里面设定
startActivityForResult(intent, 1);//设定了请求码是“1” setResult(2,intent);//设定了返回码是“2”
也可以现在前面定义
over~
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/140350.html