在 Activity 中调用另一个 Activity 时,需要调用 startActivity(Intent i), 若需要在调用另外一个 Activity 的同时传递数据,那么就需要利用 android.os.Bundle 对象封装数据的能力,将欲传递的数据或参数,通过 Bundle 来传递不同 Intent 之间的数据。 Bundle 对象针对了不同的数据类型提供了许多的方法,例如,传递 String 类型的数据,使用的方法为 Bundle.putString(stringName,stringValue) :
而要传递 Double 类型的数据,使用的方法为 Bundle.putDouble(doubleName,doubleValue) ,如下: bundle.putDouble( "height" , heightNum);
下面这一段代码是打包数据并传递:
Bundle bundle = new Bundle( ) ;
bundle. putString( "name" , nameStr) ;
bundle. putDouble ( "height" , heightNum) ;
intent. putExtras( bundle) ;
startActivity( intent) ;
在 Activity2 要如何接收来自 Activity1 传递来的数据呢?试想,在 Activity1 是以 Bundle 封装对象,自然在 Activity2 亦是以 Bundle 的方式解开封装的数据;程序中以 getIntent().getExtras() 方法取得随着 Bundle 对象传递过来的数据。若要由 Bundle 对象中取出数据,则使用 Bundle.getString(stringName) 、 Bundle.getDouble(doubleName) 等相对应的方法即可。
下面这段代码用来解析传递过来的数据: Bundle bundle = this . getIntent( ) . getExtras( ) ;
String name = bundle. getString ( "name" ) ;
Double height = bundle. getDouble ( "height" ) ;
最后,还是用一个小程序来演示一下:
首先是 activity 1: package com. zx. test;
import android. app. Activity ;
import android. content. Intent;
import android. os. Bundle;
import android. util . Log ;
import android. view . View ;
import android. widget. Button ;
import android. widget. EditText;
public class BundleTest extends Activity {
EditText nameWidget, heightWidget;
Button btnSubmit;
/** Called when the activity is first created. */
@Override
public void onCreate( Bundle savedInstanceState) {
super . onCreate( savedInstanceState) ;
setContentView( R. layout . main) ;
//get name and height
nameWidget = ( EditText) findViewById( R. id . nameText) ;
heightWidget = ( EditText) findViewById( R. id . heightText) ;
btnSubmit = ( Button ) findViewById( R. id . submit ) ;
//btnSubmit.setOnClickListener(new Button.OnClickListener()
btnSubmit. setOnClickListener( new Button . OnClickListener( )
{
@Override
public void onClick( View v) {
// TODO Auto-generated method stub
String nameStr = null ;
Double heightNum = 0. 0;
nameStr = nameWidget. getText ( ) . toString ( ) ;
heightNum = Double . parseDouble ( heightWidget. getText ( ) . toString ( ) ) ;
Log . i( "zx" , "name is " + nameStr + " height=" + heightNum) ;
Intent intent = new Intent( ) ;
intent. setClass( BundleTest. this , ResultPage. class ) ;
Bundle bundle = new Bundle( ) ;
bundle. putString( "name" , nameStr) ;
bundle. putDouble ( "height" , heightNum) ;
intent. putExtras( bundle) ;
startActivity( intent) ;
}
} ) ;
}
}
接下来是第二个 activity 的代码: package com. zx. test;
import android. app. Activity ;
import android. os. Bundle;
import android. widget. TextView;
public class ResultPage extends Activity {
@Override
public void onCreate( Bundle savedInstanceState) {
super . onCreate( savedInstanceState) ;
setContentView( R. layout . result ) ;
Bundle bundle = this . getIntent( ) . getExtras( ) ;
String name = bundle. getString ( "name" ) ;
Double height = bundle. getDouble ( "height" ) ;
TextView tv = ( TextView) findViewById( R. id . TextView01) ;
tv. setText ( "your name is " + name + ", your height is " + height . toString ( ) ) ;
}
}
阅读(19683) | 评论(2) | 转发(1) |