Android Intent间传递数据

来源:互联网 发布:什么抢购软件好 编辑:程序博客网 时间:2024/05/28 09:31

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下载地址http://download.csdn.net/detail/jdfkldjlkjdl/9869241


原创粉丝点击