灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2720回复:0

Android 程式开发:(二)使用意图 —— 2.4 使用Intent传递数据

楼主#
更多 发布于:2012-09-06 14:03

除了能从一个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的专栏

喜欢0 评分0
游客

返回顶部