Intent常见传值方式有如下几类:
1.分类
1.传递基本数据类型(String,int,short,boolean等)
2.传递Object(比如Student对象)--其中Object对象实现了Parcelable接口
3.传递Object(比如Teacher对象)--其中Object对象实现了Serializable接口
4.传递List<Object>(Object 为基本数据类型String,int)
5.传递List<Object>(Object 为一个对象,比如Student)
2.代码
1.实现了Parceable接口的Student.java
package demo.xzy.qh.com.intentpassdatademo.bean;
import android.os.Parcel;
import android.os.Parcelable;
/**
* Function:
* Created by xuzhuyun on 2017/6/13.
*/
public class Student implements Parcelable {
private int uid;
private String name;
public Student() {
}
public Student(int uid, String name) {
this.uid = uid;
this.name = name;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"uid=" + uid +
", name='" + name + '\'' +
'}';
}
//以下是Parcelable接口需要实现的部分
public static final Creator<Student> CREATOR = new Creator<Student>() {
@Override
public Student createFromParcel(Parcel in) {
return new Student(in);
}
@Override
public Student[] newArray(int size) {
return new Student[size];
}
};
public static Creator<Student> getCREATOR() {
return CREATOR;
}
@Override
public int describeContents() {
return 0;
}
//注意这里的write顺序跟下面的read顺序一定要一样
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(uid);
dest.writeString(name);
}
protected Student(Parcel in) {
uid = in.readInt();
name = in.readString();
}
}
2.实现了Serializable接口的Teacher.java
package demo.xzy.qh.com.intentpassdatademo.bean;
import java.io.Serializable;
/**
* Function:
* Created by xuzhuyun on 2017/6/13.
*/
public class Teacher implements Serializable {
private static final long serialVersionUID = 1L;
private int uid;
private String department;
public Teacher(){}
public Teacher(int uid, String department) {
this.uid = uid;
this.department = department;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
@Override
public String toString() {
return "Teacher{" +
"uid=" + uid +
", department='" + department + '\'' +
'}';
}
}
3.传值Activity
package demo.xzy.qh.com.intentpassdatademo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import java.util.ArrayList;
import demo.xzy.qh.com.intentpassdatademo.bean.Student;
import demo.xzy.qh.com.intentpassdatademo.bean.Teacher;
public class MainActivity extends Activity implements View.OnClickListener {
private Button mButton1, mButton2, mButton3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
findViewById(R.id.btn1).setOnClickListener(this);
findViewById(R.id.btn2).setOnClickListener(this);
findViewById(R.id.btn3).setOnClickListener(this);
findViewById(R.id.btn4).setOnClickListener(this);
findViewById(R.id.btn5).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1://传递基本数据类型(String,int,short,boolean等)
Intent intent1 = new Intent(this, SecondActivity.class);
intent1.putExtra("stringData", "hello");
intent1.putExtra("type", CommonUtils.TYPE_1);
startActivity(intent1);
break;
case R.id.btn2://传递Object(比如Student对象)--使用Parceable
passObjectByParceable(CommonUtils.TYPE_2);
break;
case R.id.btn3://传递Object(比如Student对象)--使用Serializable
passObjectBySerializable(CommonUtils.TYPE_3);
break;
case R.id.btn4://传递List<Object>(Object 为基本数据类型String,int)
passBasicDataTypeList(CommonUtils.TYPE_4);
break;
case R.id.btn5://传递List<Object>(Object 为一个对象,比如Student)
passObjectDataTypeList(CommonUtils.TYPE_5);
break;
}
}
/**
* 使用Parceable传递对象
*/
private void passObjectByParceable(int type) {
Student student = new Student();
student.setUid(1001);
student.setName("arthinking");
Intent intent = new Intent(this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelable("parData", student);
intent.putExtras(bundle);
intent.putExtra("type", type);
startActivity(intent);
}
/**
* 使用Serializable传递对象
*/
private void passObjectBySerializable(int type) {
Teacher teacher = new Teacher();
teacher.setUid(1001);
teacher.setDepartment("A001");
Intent intent = new Intent(this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("seriData", teacher);
intent.putExtras(bundle);
intent.putExtra("type", type);
startActivity(intent);
}
/**
* 传递基本数据型的ArrayList
*/
private void passBasicDataTypeList(int type) {
//需要ArrayList
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
Intent intent = new Intent(this, SecondActivity.class);
//传递int型数组
//intent.putIntegerArrayListExtra(key, list);
intent.putStringArrayListExtra("stringList", list);
intent.putExtra("type", type);
startActivity(intent);
}
/**
* 传递对象类型的List
*
* @param type
*/
private void passObjectDataTypeList(int type) {
//需要ArrayList
ArrayList<Student> list = new ArrayList<>();
for (int i = 0; i < 2; i++) {
Student student = new Student();
student.setUid(1000 + i);
student.setName("arthinking" + i);
list.add(student);
}
Intent intent = new Intent(this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("parArrayList", list);
intent.putExtras(bundle);
intent.putExtra("type", type);
startActivity(intent);
}
}
4.取值Activity
package demo.xzy.qh.com.intentpassdatademo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
import demo.xzy.qh.com.intentpassdatademo.bean.Student;
import demo.xzy.qh.com.intentpassdatademo.bean.Teacher;
public class SecondActivity extends Activity implements View.OnClickListener {
private Button mBack;
private TextView mValue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
initView();
initData();
}
private void initView() {
findViewById(R.id.back).setOnClickListener(this);
mValue = (TextView) findViewById(R.id.value);
}
private void initData() {
Intent intent = getIntent();
if (intent != null) {
int type = intent.getIntExtra("type", -1);
switch (type) {
//接收基本数据类型
case CommonUtils.TYPE_1:
String StringData = intent.getStringExtra("stringData");
mValue.setText(StringData);
break;
//接收Parceable传递过来的对象
case CommonUtils.TYPE_2:
Student student = (Student) intent.getParcelableExtra("parData");
mValue.setText(student.toString());
break;
//接收Serializable传递过来的对象
case CommonUtils.TYPE_3:
Teacher teacher = (Teacher) intent.getSerializableExtra("seriData");
mValue.setText(teacher.toString());
break;
//接收基本类型的数组
case CommonUtils.TYPE_4:
接收int型数组
//list =(ArrayList<Integer>) getIntent().getIntegerArrayListExtra(key);
ArrayList<String> list = getIntent().getStringArrayListExtra(
"stringList");
String str = "";
if (list != null && list.size() > 0) {
for (String s : list) {
str += s + ",";
}
}
mValue.setText(str);
break;
//接收对象类型的数组
case CommonUtils.TYPE_5:
Bundle bundle = intent.getExtras();
if (bundle != null) {
ArrayList<Student> list2 = bundle.getParcelableArrayList("parArrayList");
String str2 = "";
if (list2 != null && list2.size() > 0) {
for (Student student2 : list2) {
str2 += student2.toString() + ",";
}
mValue.setText(str2);
}
}
break;
default:
break;
}
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.back:
finish();
break;
}
}
}
以上内容包含所有核心代码,基本容纳Intent的传值与取值。
完整Demo下载地址Intent传值Demo-Android代码类资源-CSDN下载