Android学习小结之获取被启动的Activity传回的数据
程序员文章站
2024-03-07 13:56:39
当前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>
运行结果:
补充:这里点击发送回去按钮返回上一个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传回的数据,希望对大家有所帮助