Android Activity值传递

来源:互联网 发布:赵丽蓉老师知乎 编辑:程序博客网 时间:2024/06/01 22:38

1,有些功能实现需要我们在一个页面提交任务,然后在另一个页面来确认结果并把结果返回给前一个页面,比如淘宝的支付确认,这就要用到android的Activity值传递功能。

2,下面通过一个实例来讲解Activity值传递,在第一个页面中输入两个加数,然后传递给第二的页面,第二个页面输入计算结果后把值再传递给第一个页面,下面是最终的实现效果:

a)在第一个页面中输入两个加数:


b)点击“计算”后跳转到第二个页面,并把算式“3+5=”传递过去:


c)在第二个页面输入结果,点击“提交”后,把结果值“8”传给第一个页面:


3,下面是实现这个案例的具体代码,首先为两个页面设置两个布局文件:

a)第一个页面的布局文件,用来输入加法算式:

<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:orientation="vertical" >    <LinearLayout         android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="30dp"        android:orientation="horizontal">                <EditText             android:id="@+id/editText1"            android:layout_height="wrap_content"            android:layout_width="80dp"            android:phoneNumber="true"/>        <TextView             android:id="@+id/tv1"            android:layout_height="wrap_content"            android:layout_width="wrap_content"            android:text=" + "            android:textSize="30sp"/>         <EditText             android:id="@+id/editText2"            android:layout_height="wrap_content"            android:layout_width="80dp"            android:phoneNumber="true"/>         <TextView             android:id="@+id/tv2"            android:layout_height="wrap_content"            android:layout_width="wrap_content"            android:text=" = "            android:textSize="30sp"/>         <EditText             android:id="@+id/editText3"            android:layout_height="wrap_content"            android:layout_width="80dp"/>    </LinearLayout>    <Button        android:id="@+id/but"        android:layout_width="100dp"        android:layout_height="wrap_content"        android:layout_marginTop="30dp"        android:layout_gravity="center"        android:text="计 算"         android:textSize="20sp"/>    </LinearLayout>


b)第二个页面的布局文件,用来输入计算结果:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >          <LinearLayout         android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="30dp"        android:orientation="horizontal">        <TextView    android:id="@+id/text"   android:layout_height="wrap_content"   android:layout_width="100dp"   android:text="TextView"   android:textSize="20sp"/><EditText   android:id="@+id/edit"   android:layout_height="wrap_content"   android:layout_width="180dp"   android:layout_marginLeft="10dp"   android:phoneNumber="true"/></LinearLayout><Button    android:id="@+id/button"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:text="提 交"   android:textSize="20sp"   android:layout_gravity="center"   android:layout_marginTop="30dp"/>"</LinearLayout>

4,实现第一个页面的MainActivity,主要讲解看注释:

public class MainActivity extends Activity {private  EditText  editText1,editText2,editText3;private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.main);//初始化控件editText1=(EditText) findViewById(R.id.editText1);editText2=(EditText) findViewById(R.id.editText2);editText3=(EditText) findViewById(R.id.editText3);button=(Button) findViewById(R.id.but);//对按钮设置监听事件button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubIntent intent=new Intent(MainActivity.this,SecondActivity.class);//第一个EditText中输入的值String x=editText1.getText().toString().trim();//第二个EditText中输入的值String y=editText2.getText().toString().trim();//把“x+y=”封装到intent中,待传给下一个Activityintent.putExtra("message", x+" + "+y+" = ");/** 通过startActivityForResult方法启动下一个Activity* 第二个参数为请求码(requestCode),这里设为1000*/startActivityForResult(intent, 1000);}});}/** 通过onActivityResult方法来接收回传过来的数据* 第一个参数为请求码(requestCode)* 第二个参数为结果码(resultCode)* 第三个参数为回传过来的数据(data)*/@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);//通过比较请求码和结果码来判断是否接收回传的数据if (requestCode==1000&&resultCode==1001) {String result_value=data.getStringExtra("result");//把回传过来的数据显示在editText3上editText3.setText(result_value);}} }


5,实现第二个页面的SecondActivity:

public class SecondActivity extends Activity{private  TextView  textView;private  Button  button;private  EditText  editText;@Overrideprotected  void  onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.second);//初始化控件button=(Button) findViewById(R.id.button);editText=(EditText) findViewById(R.id.edit);textView=(TextView) findViewById(R.id.text);//获得MainActivity传递过来的值,并显示在textView上Intent intent=getIntent();String message=intent.getStringExtra("message");textView.setText(message);//对按钮设置监听事件button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// 通过editText获取到输入的计算结果String value=editText.getText().toString().trim();//通过Intent把计算结果(value)回传给MainActivityIntent intent=new Intent();intent.putExtra("result", value);//第一个参数为结果码(resultCode),第二个参数为回传的数据(data)setResult(1001, intent);//结束Activity生命周期finish();}    }); }}


6,不要忘记在清单文件中声明SecondActivity:

 

    <activity          android:name="com.example.activity3.MainActivity"          android:label="@string/app_name" >          <intent-filter>              <action android:name="android.intent.action.MAIN" />              <category android:name="android.intent.category.LAUNCHER" />          </intent-filter>     </activity>     <activity           android:name="com.example.activity3.SecondActivity">     </activity>


1 0