Android 程式開發:(二)使用意圖 —— 2.4 使用Intent傳遞數據

除瞭能從一個Activity返回數據結果之外,向一個Activity傳遞數據也是很常用的。
    1.新建一個名為PassData的工程。
 
    2.main.xml中的代碼。
 
[java] view plaincopy<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
 
    <Button 
        android:id="@+id/btn_SecondActivity" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:onClick="onClick" 
        android:text="Click to go to Second Activity" /> 
 
</LinearLayout> 
    3.在res/layout文件夾下,創建secondactivity.xml文件。[java] view plaincopy<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
 
    <TextView 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="Welcome to Second Activity" /> 
 
    <Button 
        android:id="@+id/btn_MainActivity" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:onClick="onClick" 
        android:text="Click to return to main activity" /> 
 
</LinearLayout> 
    4.新建一個Activity子類:SecondActivity.java。[java] view plaincopypublic class SecondActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.secondactivity); 
 
        // —get the data passed in using getStringExtra()— 
        Toast.makeText(this, getIntent().getStringExtra("str1"), 
                Toast.LENGTH_SHORT).show(); 
 
        // —get the data passed in using getIntExtra()— 
        Toast.makeText(this, 
                Integer.toString(getIntent().getIntExtra("age1", 0)), 
                Toast.LENGTH_SHORT).show(); 
 
        // —get the Bundle object passed in— 
        Bundle bundle = getIntent().getExtras(); 
 
        // —get the data using the getString()— 
        Toast.makeText(this, bundle.getString("str2"), Toast.LENGTH_SHORT) 
                .show(); 
 
        // —get the data using the getInt() method— 
        Toast.makeText(this, Integer.toString(bundle.getInt("age2")), 
                Toast.LENGTH_SHORT).show(); 
    } 
 
    public void onClick(View view) { 
        // —use an Intent object to return data— 
        Intent i = new Intent(); 
 
        // —use the putExtra() method to return some 
        // value— 
        i.putExtra("age3", 45); 
 
        // —use the setData() method to return some value— 
        i.setData(Uri.parse("Something passed back to main activity")); 
  
        // —set the result with OK and the Intent object— 
        setResult(RESULT_OK, i); 
 
        // —destroy the current activity— 
        finish(); 
    } 

    5.AndroidManifest.xml中的代碼。[java] view plaincopy<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="net.horsttnann.PassingData" 
    android:versionCode="1" 
    android:versionName="1.0" > 
 
    <uses-sdk android:minSdkVersion="10" /> 
 
    <application 
        android:icon="@drawable/ic_launcher" 
        android:label="@string/app_name" > 
        <activity 
            android:name=".PassingDataActivity" 
            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="net.horsttnann.PassingData.SecondActivity" 
            android:label="Second Activity" > 
            <intent-filter> 
                <action android:name="net.horsttnann.PassingDataSecondActivity" /> 
 
                <category android:name="android.intent.category.DEFAULT" /> 
            </intent-filter> 
        </activity> 
    </application> 
 
</manifest> 
 
    6.PassDataActivity中的代碼。
 
 
[java] view plaincopyprint?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.learn2develop.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(); 
            }             
        } 
    } 
 

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.learn2develop.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調試。
 
 
 
 
效果圖:
 
    程序第一次啟動:
 

    跳轉到SecondActivity:

    返回PassDataActivity:

 作者 manoel的專欄

發佈留言