基于android startActivityForResult的学习心得总结
程序员文章站
2023-12-04 21:28:04
从昨晚到现在终于调试通了一个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,只需要用他做参数就行了。
下一篇: 电脑屏幕倒过来怎么恢复正常