本章节翻译自《Beginning-Android-4-Application-Development》,如有翻译不当的地方,敬请指出。
原书购买地址http://www.amazon.com/Beginning-Android-4-Application-Development/dp/1118199545/除了能从一个Activity返回数据结果之外,向一个Activity传递数据也是很常用的。
1. 新建一个工程,PassData。
2. main.xml中的代码。
- <?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>
- <?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>
- public 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();
- }
- }
- <?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.manoel.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中的代码。
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调试。