欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-03-06 10:11:13
当前activity:包含一个button和一个textview,用于启动另一个activity和显示传回的数据,这里重写了onactivityresult()方法。...

当前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> 

运行结果:

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

补充:这里点击发送回去按钮返回上一个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传回的数据,希望对大家有所帮助