当前位置: 移动技术网 > IT编程>移动开发>Android > Android学习小结之获取被启动的Activity传回的数据

Android学习小结之获取被启动的Activity传回的数据

2019年07月24日  | 移动技术网IT编程  | 我要评论

当前activity:包含一个button和一个textview,用于启动另一个activity和显示传回的数据,这里重写了onactivityresult()方法。

public class mainactivity extends appcompatactivity {
private textview textview;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
//找到textview
textview=(textview)findviewbyid(r.id.textview);
findviewbyid(r.id.btnsend).setonclicklistener(new view.onclicklistener() {
@override
public void onclick(view view) {
intent intent=new intent(mainactivity.this,anotheractivity.class);
startactivityforresult(intent,0);
}
});
}
@override
protected void onactivityresult(int requestcode, int resultcode, intent data) {
super.onactivityresult(requestcode, resultcode, data);
textview.settext("另外一个activity传回来的数据是:"+data.getstringextra("data"));
}
}

xml文件:activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<linearlayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingleft="@dimen/activity_horizontal_margin"
android:paddingright="@dimen/activity_horizontal_margin"
android:paddingtop="@dimen/activity_vertical_margin"
android:paddingbottom="@dimen/activity_vertical_margin"
tools:context="com.example.androidtest.mainactivity">
<button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动另一个activity"
android:id="@+id/btnsend" />
<textview
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="new text"
android:id="@+id/textview" />
</linearlayout>

被启动的activity:包含一个button和edittext,用于将数据发送回去和输入要传的数据。

public class anotheractivity extends appcompatactivity {
private edittext edittext;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_another);
edittext= (edittext) findviewbyid(r.id.edittext);
button button= (button) findviewbyid(r.id.btnsendback);
button.setonclicklistener(new view.onclicklistener() {
@override
public void onclick(view view) {
//返回结果
intent i=new intent();
i.putextra("data",edittext.gettext().tostring());
setresult(1,i);
finish();
}
});
}
}

xml文件:activity_another.xml

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingbottom="@dimen/activity_vertical_margin"
android:paddingleft="@dimen/activity_horizontal_margin"
android:paddingright="@dimen/activity_horizontal_margin"
android:paddingtop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.example.androidtest.anotheractivity">
<edittext
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edittext" />
<button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送回去"
android:id="@+id/btnsendback"/>
</linearlayout> 

运行结果:

补充:这里点击发送回去按钮返回上一个activity没有问题,但是如果点系统自带的返回键就会出错了,出现此bug的原因就是resultcode没有判断,点击系统自带的返回键的resultcode==result_canceled,所以是不一样的。

解决方法:所以这里的requestcode和resultcode就能发挥作用了,在上述程序中requestcode==0,resultcode==1,也就是需要判断是否是跳转到该activity以及返回上一个activity是通过该按钮还是通过系统返回键来进行的,所以mainactivity中的onactivityresult()方法可以改进为:

@override
protected void onactivityresult(int requestcode, int resultcode, intent data) {
super.onactivityresult(requestcode, resultcode, data);
if(requestcode==0){
if(resultcode==1){
textview.settext("另外一个activity传回来的数据是:"+data.getstringextra("data"));
}
}
}

以上所述是小编给大家介绍的获取被启动的activity传回的数据,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网