首页 > 系统 > Android > 正文

基于startActivityForResult方法处理两个Activity之间数据传递问题

2020-04-11 11:14:46
字体:
来源:转载
供稿:网友

废话不多说了,直接给大家贴代码了。

package com.example.testactivityresquest; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity {   @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     Button btn = (Button) findViewById(R.id.button);     btn.setOnClickListener(new OnClickListener() {       @Override       public void onClick(View v) {          Intent intent = new Intent(MainActivity.this, Activityb.class);         int[] nums = { , };         intent.putExtra(Changliang.KEY, nums);         //有别于startActivity,如果启动的其他Activity多了以后。相当于定一个特定KEY值,返回根据KEY值返回。         startActivityForResult(intent, Changliang.requestCode);        }     });   }  //Activityb传回来的数据在这个方法中获取   @Override   protected void onActivityResult(int requestCode, int resultCode, Intent data) {     int s = data.getIntExtra(Changliang.Activity_b_KEY, );      Toast.makeText(getApplicationContext(), "传递两个数得到的和是:" + s, ).show();    } } package com.example.testactivityresquest; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class Activityb extends Activity {   @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activityb);     Intent intent = this.getIntent();     int[] n = intent.getIntArrayExtra(Changliang.KEY);     final int nums = n[] + n[];     Toast.makeText(this, n[] + " " + n[], ).show();     Button btn = (Button) findViewById(R.id.button);     btn.setOnClickListener(new OnClickListener() {       @Override       public void onClick(View v) {         Intent intent = new Intent(Activityb.this, MainActivity.class);         intent.putExtra(Changliang.Activity_b_KEY, nums);         // 将数据根据特定键值的意图事件导入         Activityb.this.setResult(Changliang.requestCode, intent);         //关闭后返回主Activity         Activityb.this.finish();       }     });   } }package com.example.testactivityresquest;public class Changliang {public static final String KEY="key";public static final String Activity_b_KEY="key1";public static final int requestCode=1987;}

xml文件

 <RelativeLayout 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:background="#ff" >   <Button     android:id="@+id/button"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_alignParentTop="true"     android:layout_centerHorizontal="true"     android:layout_marginTop="dp"     android:text="启动Activityb" /> </RelativeLayout> <?xml version="." encoding="utf-"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:layout_width="match_parent"   android:layout_height="match_parent"   android:background="#ff"   android:orientation="vertical" >   <Button     android:id="@+id/button"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:text="返回Activity" /> </LinearLayout>

别忘在AndroidManifast中注册activityb。

运行效果图:

startActivityForResult与startActivity的不同之处在于:

1、startActivity( )

仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( )。

2、startActivityForResult( )

可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activity调用了finish()方法以后,程序会自动跳转回T1Activity,并调用前一个T1Activity中的onActivityResult( )方法。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表