【Android 开发教程】使用Intent传递数据

本章节翻译自《Beginning-Android-4-Application-Development》,如有翻译不当的地方,敬请指出。

原书购买地址http://www.amazon.com/Beginning-Android-4-Application-Development/dp/1118199545/


除了能从一个Activity返回数据结果之外,向一个Activity传递数据也是很常用的。

1. 新建一个工程,PassData。

2. main.xml中的代码。

[java] view plain copy
  1. "1.0" encoding="utf-8"?>  
  2. "http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     
  8.         android:id="@+id/btn_SecondActivity"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:onClick="onClick"  
  12.         android:text="Click to go to Second Activity" />  
  13.   
  14.   
3. 在res/layout文件夹下,创建secondactivity.xml文件。
[java] view plain copy
  1. "1.0" encoding="utf-8"?>  
  2. "http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="wrap_content"  
  10.         android:text="Welcome to Second Activity" />  
  11.   
  12.     
  13.         android:id="@+id/btn_MainActivity"  
  14.         android:layout_width="fill_parent"  
  15.         android:layout_height="wrap_content"  
  16.         android:onClick="onClick"  
  17.         android:text="Click to return to main activity" />  
  18.   
  19.   
4. 新建一个Activity子类:SecondActivity.java。
[java] view plain copy
  1. public class SecondActivity extends Activity {  
  2.     @Override  
  3.     public void onCreate(Bundle savedInstanceState) {  
  4.         super.onCreate(savedInstanceState);  
  5.         setContentView(R.layout.secondactivity);  
  6.   
  7.         // ---get the data passed in using getStringExtra()---  
  8.         Toast.makeText(this, getIntent().getStringExtra("str1"),  
  9.                 Toast.LENGTH_SHORT).show();  
  10.   
  11.         // ---get the data passed in using getIntExtra()---  
  12.         Toast.makeText(this,  
  13.                 Integer.toString(getIntent().getIntExtra("age1"0)),  
  14.                 Toast.LENGTH_SHORT).show();  
  15.   
  16.         // ---get the Bundle object passed in---  
  17.         Bundle bundle = getIntent().getExtras();  
  18.   
  19.         // ---get the data using the getString()---  
  20.         Toast.makeText(this, bundle.getString("str2"), Toast.LENGTH_SHORT)  
  21.                 .show();  
  22.   
  23.         // ---get the data using the getInt() method---  
  24.         Toast.makeText(this, Integer.toString(bundle.getInt("age2")),  
  25.                 Toast.LENGTH_SHORT).show();  
  26.     }  
  27.   
  28.     public void onClick(View view) {  
  29.         // ---use an Intent object to return data---  
  30.         Intent i = new Intent();  
  31.   
  32.         // ---use the putExtra() method to return some  
  33.         // value---  
  34.         i.putExtra("age3"45);  
  35.   
  36.         // ---use the setData() method to return some value---  
  37.         i.setData(Uri.parse("Something passed back to main activity"));  
  38.   
  39.         // ---set the result with OK and the Intent object---  
  40.         setResult(RESULT_OK, i);  
  41.   
  42.         // ---destroy the current activity---  
  43.         finish();  
  44.     }  
  45. }  
5. AndroidManifest.xml中的代码。
[java] view plain copy
  1. "1.0" encoding="utf-8"?>  
  2. "http://schemas.android.com/apk/res/android"  
  3.     package="net.horsttnann.PassingData"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     "10" />  
  8.   
  9.     
  10.         android:icon="@drawable/ic_launcher"  
  11.         android:label="@string/app_name" >  
  12.         
  13.             android:name=".PassingDataActivity"  
  14.             android:label="@string/app_name" >  
  15.               
  16.                 "android.intent.action.MAIN" />  
  17.   
  18.                 "android.intent.category.LAUNCHER" />  
  19.               
  20.           
  21.         
  22.             android:name="net.manoel.PassingData.SecondActivity"  
  23.             android:label="Second Activity" >  
  24.               
  25.                 "net.horsttnann.PassingDataSecondActivity" />  
  26.   
  27.                 "android.intent.category.DEFAULT" />  
  28.               
  29.           
  30.       
  31.   
  32.   

6. PassDataActivity中的代码。

public class PassingDataActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    
    public void onClick(View view) {
    	Intent i = new 
    			Intent("net.manoel.PassingDataSecondActivity");

    	//---use putExtra() to add new key/value pairs---            
    	i.putExtra("str1", "This is a string");
    	i.putExtra("age1", 25);

    	//---use a Bundle object to add new key/values 
    	// pairs---  
    	Bundle extras = new Bundle();
    	extras.putString("str2", "This is another string");
    	extras.putInt("age2", 35);                

    	//---attach the Bundle object to the Intent object---
    	i.putExtras(extras);                

    	//---start the activity to get a result back---
    	startActivityForResult(i, 1);
    }
    
    public void onActivityResult(int requestCode, 
    int resultCode, Intent data)
    {
        //---check if the request code is 1---
        if (requestCode == 1) {

            //---if the result is OK--- 
            if (resultCode == RESULT_OK) {

                //---get the result using getIntExtra()---
                Toast.makeText(this, Integer.toString(
                    data.getIntExtra("age3", 0)), 
                    Toast.LENGTH_SHORT).show();      

                //---get the result using getData()---
                Toast.makeText(this, data.getData().toString(), 
                    Toast.LENGTH_SHORT).show();
            }            
        }
    }

}

7. 按F11调试。


你可能感兴趣的:(Android-x程序设计)