之前项目需要,找过这方面知识。所以今天也总结一下。大家都知道activity跳转用intent,Android的当前页面跳转到新的页面。当然跳转的同时常常要携带数据或者对象。那我下面就说说跳转带对象吧。还有在例子当中,新的activity返回时,也有对象一起返回。下面看代码,只要入门Android了都看得懂,我就不再写很多注释了。
demo源码例子下载地址:点击此处下载
有两种对象类型可以传递,一是Parcelable,推荐用这个。二是Serializable。当然你在class建立对象时,都要对这两个进行接口。看代码。
package com.example.intentdemo;
import android.os.Parcel;
import android.os.Parcelable;
public class User implements Parcelable{
private String name;
private String sex;
private int eage;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getEage() {
return eage;
}
public void setEage(int eage) {
this.eage = eage;
}
public static final Parcelable.Creator CREATOR = new Creator() {
public User createFromParcel(Parcel source) {
User user = new User();
user.name = source.readString();
user.sex = source.readString();
user.eage = source.readInt();
return user;
}
public User[] newArray(int size) {
return new User[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int arg1) {
parcel.writeString(name);
parcel.writeString(sex);
parcel.writeInt(eage);
}
}
package com.example.intentdemo;
import java.io.Serializable;
public class Student implements Serializable {
private String name;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getEage() {
return eage;
}
public void setEage(int eage) {
this.eage = eage;
}
private int eage;
}
MainActivity.class
package com.example.intentdemo;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener {
private ArrayList mArrayListUsers = new ArrayList();
private ArrayList mArrayListStudent = new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
InitUI();
}
private void InitUI() {
Button Parcelable = (Button) findViewById(R.id.button1);
Button Serializable = (Button) findViewById(R.id.button2);
if (Parcelable != null) {
Parcelable.setOnClickListener(this);
}
if (Serializable != null) {
Serializable.setOnClickListener(this);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View arg0) {
if (arg0.getId() == R.id.button1) {
setParcelable();
} else if (arg0.getId() == R.id.button2) {
setSerializable();
}
}
private void setSerializable() {
Student student = new Student();
student.setName("Serializable");
student.setSex("nv");
student.setEage(25);
mArrayListStudent.add(student);
mArrayListStudent.add(student);
Intent mIntent = new Intent(this, IntentSerializableActivity.class);
Bundle mBundle = new Bundle();
mBundle.putSerializable("student_key", student); // 传递一个user对象
mBundle.putSerializable("student_Arry", mArrayListStudent); // 传递一个user对象列表
mIntent.putExtras(mBundle);
startActivityForResult(mIntent, 200); // 带返回结果的Intent,标志码是1
}
private void setParcelable() {
User user = new User();
user.setName("Parcelable");
user.setSex("nan");
user.setEage(25);
mArrayListUsers.add(user);
mArrayListUsers.add(user);
Intent mIntent = new Intent(this, IntentParcelableActivity.class);
Bundle mBundle = new Bundle();
mBundle.putParcelable("User_key", user); // 传递一个user对象
mBundle.putParcelableArrayList("User_Arry", mArrayListUsers); // 传递一个user对象列表
mIntent.putExtras(mBundle);
startActivityForResult(mIntent, 100); // 带返回结果的Intent,标志码是1
}
// 返回activity页面刷新
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
TextView show = (TextView) findViewById(R.id.test);
if (resultCode == RESULT_OK && requestCode == 100) {
Bundle bundle = this.getIntent().getExtras();
if (bundle != null) {
mArrayListUsers = bundle.getParcelableArrayList("User_Arry");
}
show.setText("");
show.append("IntentParcelableActivity返回的数据: " + "\n");
for (int i = 0; i < mArrayListUsers.size(); i++) {
User userArrayList = new User();
userArrayList = mArrayListUsers.get(i);
show.append("name is: " + userArrayList.getName() + "\n"
+ "age is: " + userArrayList.getEage() + "\n");
}
} else if (resultCode == RESULT_OK && requestCode == 200) {
Bundle bundle = this.getIntent().getExtras();
if (bundle != null) {
mArrayListStudent = (ArrayList) bundle
.getSerializable("student_Arry");
}
show.setText("");
show.append("IntentSerializableActivity返回的数据: " + "\n");
for (int i = 0; i < mArrayListStudent.size(); i++) {
Student studentArrayList = new Student();
studentArrayList = mArrayListStudent.get(i);
show.append("name is: " + studentArrayList.getName() + "\n"
+ "age is: " + studentArrayList.getEage() + "\n");
}
}
}
}
接受数据新的activity
IntentParcelableActivity.class
package com.example.intentdemo;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.KeyEvent;
import android.view.Menu;
import android.widget.TextView;
public class IntentParcelableActivity extends Activity {
private ArrayList mArrayListUsers = new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView mTextView = new TextView(this);
User user = new User();
Bundle bundle = this.getIntent().getExtras();
if (bundle != null) {
user = bundle.getParcelable("User_key");
mArrayListUsers = bundle.getParcelableArrayList("User_Arry");
}
mTextView.append("You name is: " + user.getName() + "\n"
+ "You age is: " + user.getEage() + "\n" + "\n");
for (int i = 0; i < mArrayListUsers.size(); i++) {
User userArrayList = new User();
userArrayList = mArrayListUsers.get(i);
mTextView.append("You name is: " + userArrayList.getName() + "\n"
+ "You age is: " + userArrayList.getEage() + "\n");
}
setContentView(mTextView);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
// 返回按键调用
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent intent = new Intent();
Bundle mBundle = new Bundle();
mBundle.putParcelableArrayList("User_Arry", mArrayListUsers); //传递一个user对象列表
intent.putExtras(mBundle);
setResult(RESULT_OK, intent);
finish();
}
return true;
}
}
IntentSerializableActivity.class
package com.example.intentdemo;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.KeyEvent;
import android.view.Menu;
import android.widget.TextView;
public class IntentSerializableActivity extends Activity {
private ArrayList mArrayListStudent=new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView mTextView = new TextView(this);
Student student = new Student();
Bundle bundle = this.getIntent().getExtras();
if (bundle != null) {
student = (Student) bundle.getSerializable("student_key");
mArrayListStudent = (ArrayList) bundle.getSerializable("student_Arry");
}
mTextView.append("You name is: " + student.getName() + "\n"
+ "You age is: " + student.getEage() + "\n" + "\n");
for (int i = 0; i < mArrayListStudent.size(); i++) {
Student studentArrayList = new Student();
studentArrayList = mArrayListStudent.get(i);
mTextView.append("You name is: " + studentArrayList.getName() + "\n"
+ "You age is: " + studentArrayList.getEage() + "\n");
}
setContentView(mTextView);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
// 返回按键调用
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent intent = new Intent();
Bundle mBundle = new Bundle();
mBundle.putSerializable("student_Arry", mArrayListStudent); //传递一个user对象列表
intent.putExtras(mBundle);
setResult(RESULT_OK, intent);
finish();
}
return true;
}
}
xml布局我就不贴了,需要源码可以下载。
其实看一下代码,都是能看明白。也很容易实践,用过一遍之后就好很多了。