准备:
1. 先创建好一个android程序,并新建一个活动和其的布局文件等。
一 传递一个字符串类型的数据(向下)
//MainActivity
package com.example.sendarguments;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,TheOtherActivity.class);
intent.putExtra("extra_data", "我是一个传递的数据");
startActivity(intent);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
//TheOtherActivity
package com.example.sendarguments;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class TheOtherActivity extends Activity{
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.theother_layout);
Intent i = getIntent();
tv = (TextView) findViewById(R.id.textView1);
tv.setText(i.getStringExtra("extra_data"));
}
}
activity_main 中添加了一个id为Button1的按钮
theother_layout 添加了一个id为textView1的TextView
点击按钮后可以在第二个活动中看见第一个活动给其传递的参数
二 传递一个Bundle数据(向下)
//修改MainActivity里的onCreate
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,TheOtherActivity.class);
Bundle b = new Bundle();
b.putString("name", "zhangsan");
b.putInt("age", 23);
intent.putExtras(b);
startActivity(intent);
}
});
}
//TheOtherActivity 修改onCreate方法
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.theother_layout);
Intent i = getIntent();
Bundle b = i.getExtras();
tv = (TextView) findViewById(R.id.textView1);
tv.setText(String.format("name=%s,age=%d,test=%s",
b.getString("name"),b.getInt("age"),
b.getString("test", "没有传过来第三个值")));
}
还可以直接传递Bundle
//修改MainActivity里的onCreate
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,TheOtherActivity.class);
Bundle b = new Bundle();
b.putString("name", "zhangsan");
b.putInt("age", 23);
intent.putExtra("data", b);
startActivity(intent);
}
});
}
//TheOtherActivity 修改onCreate方法
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.theother_layout);
Intent i = getIntent();
Bundle b = i.getBundleExtra("data");
tv = (TextView) findViewById(R.id.textView1);
tv.setText(String.format("name=%s,age=%d,test=%s", b.getString("name"),
b.getInt("age"),b.getString("test", "没有传过来第三个值")));
}
三 传递一个自定义类型值对象(向下)
新建一个User类
1.Serializable的使用 java内置 操作简单
//User
package com.example.sendarguments;
import java.io.Serializable;
public class User implements Serializable {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
修改MainActivity里的onCreate
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,TheOtherActivity.class);
intent.putExtra("user", new User("zhangsan",2));
startActivity(intent);
}
});
}
//TheOtherActivity 修改onCreate方法
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.theother_layout);
Intent i = getIntent();
User user = (User) i.getSerializableExtra("user");
tv = (TextView) findViewById(R.id.textView1);
tv.setText(String.format("User info(name=%s,age=%d)", user.getName(),user.getAge()));
}
达到的效果与之前是一样的
2.Parcelable的使用 android 内置 效率高 专门面向移动设备 速度快
//User
package com.example.sendarguments;
import java.io.Serializable;
import android.os.Parcel;
import android.os.Parcelable;
public class User implements Parcelable {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeString(getName());
dest.writeInt(getAge());
}
public static final Creator<User> CREATOR =new Creator<User>() {
@Override
public User createFromParcel(Parcel source) {
// TODO Auto-generated method stub
return new User(source.readString(),source.readInt());
}
@Override
public User[] newArray(int size) {
// TODO Auto-generated method stub
return new User[size];
}
};
}
//TheOtherActivity
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.theother_layout);
Intent i = getIntent();
User user = (User) i.getParcelableExtra("user");
tv = (TextView) findViewById(R.id.textView1);
tv.setText(String.format("User info(name=%s,age=%d)", user.getName(),user.getAge()));
}
四 向上一个活动传递数据
在TheOther_layout中添加一个id为Button2的按钮
package com.example.sendarguments;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class TheOtherActivity extends Activity{
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.theother_layout);
findViewById(R.id.button2).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("data_return", "hello MainActivity");
setResult(RESULT_OK,intent);
finish();
}
});
}
}
//MainActivity
package com.example.sendarguments;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,TheOtherActivity.class);
startActivityForResult(intent,10086); //第二个参数为请求码唯一
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 10086:
if(RESULT_OK == resultCode){
String returnedData = data.getStringExtra("data_return");
Log.d("MainActivity_Back",returnedData);
}
break;
default:
break;
}
}
}