基于android startActivityForResult的学习心得总结
程序员文章站
2023-11-16 17:51:16
从昨晚到现在终于调试通了一个startactivityforresult的例子,网上要么有些说的太复杂了,要么说的含糊,搞的我走了很多弯路,所以写篇心得。在一个主界面(主a...
从昨晚到现在终于调试通了一个startactivityforresult的例子,网上要么有些说的太复杂了,要么说的含糊,搞的我走了很多弯路,所以写篇心得。
在一个主界面(主activity)上能连接往许多不同子功能模块(子activity上去),当子模块的事情做完之后就回到主界面,还同时返回一些子模块完成的数据交给主activity处理。 用startactivity启动主界面是一个新的intent实例,而访问的主界面还在activity栈的下面没有调出来,这样做的一个最大的问题是,回不到原界面就不能多个子功能模块共同来给主界面提供数据或服务了。这个时候就要用startactivityforresult了!
目的: mainactivity.java 是主界面,secondactivity.java 是子功能模块,要从main启动second,second收到main发来的数据干完活之后,按按键ok会把结果汇报给main,同时自己关闭返回到main。
具体实现:
分四部分:
1,在mainactivity里面设置一个按钮sendbuddle,发送数据到secondactivity,同时跳转到second界面。按键监听代码:
class sendbuttonlisten implements onclicklistener{
public void onclick(view v) {
// todo auto-generated method stub
intent intent = new intent();
string str = "dajia hao ";
intent.putextra("send", str);
intent.setclass(mainactivity.this, secondactivity.class);
startactivityforresult(intent, 0);
}
}
2,在secondactivity里面的oncreate函数里,接收来自main里的intent发来的数据。
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_second);
okbutton = (button)findviewbyid(r.id.ok); //按这个ok按键,会返回到main。
intent intent = getintent();
string getstr = intent.getstringextra("send");
textview tv = (textview)findviewbyid(r.id.sendtext);
tv.settext(getstr);
toast.maketext(secondactivity.this,
"从mainactivity传回来的数据是:"+getstr,
toast.length_short).show();
okbutton.setonclicklistener(new okbuttonlisten());
}
3,在secondactivity里实现监听ok按键,按下后返回到mainactivity,同时自己关闭,并给mainactivity发送数据。ok按键的监听代码如下:
class okbuttonlisten implements onclicklistener{
public void onclick(view v) {
// todo auto-generated method stub
intent sendintent = new intent(secondactivity.this, mainactivity.class);//这种方法今天才学的,记下!方便这样写,坑爹的有些教程,这块没有给inent绑定
bundle bundle = new bundle();
bundle.putstring("send", "大家好");
sendintent.putextras(bundle);
secondactivity.this.setresult(result_ok, sendintent);
secondactivity.this.finish();
}
4,返回到main后,main要接收second发来的数据。在mainactivity里复写它的onactivityresult方法。
@override
protected void onactivityresult(int requestcode, int resultcode, intent data) {
// todo auto-generated method stub
super.onactivityresult(requestcode, resultcode, data);
if(resultcode==result_ok){
bundle bundle = data.getextras();
string str = bundle.getstring("send");
toast.maketext(mainactivity.this,
"我回来的,第二个activity传回的数据是:"+str,
toast.length_short).show();
}
}
注意:这里面不要再新建intent,onactivityresult有三个参数,第三个参数就是intent,只需要用他做参数就行了。
在一个主界面(主activity)上能连接往许多不同子功能模块(子activity上去),当子模块的事情做完之后就回到主界面,还同时返回一些子模块完成的数据交给主activity处理。 用startactivity启动主界面是一个新的intent实例,而访问的主界面还在activity栈的下面没有调出来,这样做的一个最大的问题是,回不到原界面就不能多个子功能模块共同来给主界面提供数据或服务了。这个时候就要用startactivityforresult了!
目的: mainactivity.java 是主界面,secondactivity.java 是子功能模块,要从main启动second,second收到main发来的数据干完活之后,按按键ok会把结果汇报给main,同时自己关闭返回到main。
具体实现:
分四部分:
1,在mainactivity里面设置一个按钮sendbuddle,发送数据到secondactivity,同时跳转到second界面。按键监听代码:
复制代码 代码如下:
class sendbuttonlisten implements onclicklistener{
public void onclick(view v) {
// todo auto-generated method stub
intent intent = new intent();
string str = "dajia hao ";
intent.putextra("send", str);
intent.setclass(mainactivity.this, secondactivity.class);
startactivityforresult(intent, 0);
}
}
2,在secondactivity里面的oncreate函数里,接收来自main里的intent发来的数据。
复制代码 代码如下:
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_second);
okbutton = (button)findviewbyid(r.id.ok); //按这个ok按键,会返回到main。
intent intent = getintent();
string getstr = intent.getstringextra("send");
textview tv = (textview)findviewbyid(r.id.sendtext);
tv.settext(getstr);
toast.maketext(secondactivity.this,
"从mainactivity传回来的数据是:"+getstr,
toast.length_short).show();
okbutton.setonclicklistener(new okbuttonlisten());
}
3,在secondactivity里实现监听ok按键,按下后返回到mainactivity,同时自己关闭,并给mainactivity发送数据。ok按键的监听代码如下:
复制代码 代码如下:
class okbuttonlisten implements onclicklistener{
public void onclick(view v) {
// todo auto-generated method stub
intent sendintent = new intent(secondactivity.this, mainactivity.class);//这种方法今天才学的,记下!方便这样写,坑爹的有些教程,这块没有给inent绑定
bundle bundle = new bundle();
bundle.putstring("send", "大家好");
sendintent.putextras(bundle);
secondactivity.this.setresult(result_ok, sendintent);
secondactivity.this.finish();
}
4,返回到main后,main要接收second发来的数据。在mainactivity里复写它的onactivityresult方法。
复制代码 代码如下:
@override
protected void onactivityresult(int requestcode, int resultcode, intent data) {
// todo auto-generated method stub
super.onactivityresult(requestcode, resultcode, data);
if(resultcode==result_ok){
bundle bundle = data.getextras();
string str = bundle.getstring("send");
toast.maketext(mainactivity.this,
"我回来的,第二个activity传回的数据是:"+str,
toast.length_short).show();
}
}
注意:这里面不要再新建intent,onactivityresult有三个参数,第三个参数就是intent,只需要用他做参数就行了。
上一篇: cad打开时提示缺少shx文件怎么办?
下一篇: JAVA语言基础组成(1)
推荐阅读
-
Android 布局中的android:onClick的使用方法总结
-
Android中的脑残设计总结
-
android startActivityForResult的使用方法介绍
-
基于android startActivityForResult的学习心得总结
-
android基于SwipeRefreshLayout实现类QQ的侧滑删除
-
Android基于zxing的二维码(网格)扫描 仿支付宝网格扫描
-
Android基于Aidl的跨进程间双向通信管理中心
-
基于2013年上半年百度搜索引擎的变化总结
-
Android4.2中全屏或者取消标题栏的方法总结
-
Android编程基于距离传感器控制手机屏幕熄灭的方法详解