美文网首页
Android——Intent传值

Android——Intent传值

作者: Lznby | 来源:发表于2018-05-09 09:06 被阅读0次
1、使用putExtra()和getIntent()方式传值。一般只能传基本类型数据。
private static final String EXTRA_NAME= "name";//键
private String name = "Tom";

Intent intent = new Intent(MainActivity.this,SecondActivity.class);

//1.将所传值以键值对的形式存放到intent中。
intent.putExtra(EXTRA_NAME,name)

startActivity(intent);
//2.获取上一个Activity传递的值
Intent intent = getIntent();
String name = intent.getStringExtra(MainActivity.EXTRA_NAME);
注意:获取数据时,intent.getXxxExtra(KEY)方法应和所传递的值匹配。

2、以有返回结果的方式启动Activity
//1.以有返回结果的方式启动下一个Activity

private static final int REQUEST_CODE_CHEAT = 0;//请求码

Intent intent = new Intent(MainActivity.this, SecondActivity.class);

startActivityForResult(intent, REQUEST_CODE_CHEAT );//第二个参数为请求码,唯一即可
//2.第二个Activity中设置返回的值。

public static final String EXTRA_NAME = "name";//键
private String name = "Tom"

Intent intent = new Intent();

intent.putExtra(EXTRA_NAME , name);//存放返回结果的值

setResult(RESULT_OK, intent);//第一个参数为结果码,用于校验取值
//3.在第一个Activity中重写onActivityResult方法

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   
    if (resultCode != Activity.RESULT_OK) {
        //校验结果码是否正确
        return;
    }

    if (requestCode == REQUEST_CODE_CHEAT) {
        //校验请求码是否正确
        if (data == null) {
            //判断返回结果是否为空
            return;
        }
        String name = data.getStringExtra(SecondActivity.EXTRA_NAME);//获取返回结果值
        Toast.makeText(this,"SecondActivity所传返回值为:" + name, Toast.LENGTH_SHORT).show();
    }
}
3、使用Serializable方式传递对象。
//1.创建实体类并实现接口Serializable
public class Person implements Serializable {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
//2.添加传递值的对象
public static final String EXTRA_PERSON= "person";//键

Person person = new Person();//创建对象并赋值
person.setAge(20);
person.setName("Tom");

Intent intent = new Intent(MainActivity.this,SecondActivity.class);

intent.putExtra(EXTRA_PERSON,person);//以键值对形式存放

startActivity(intent);
//3.获取传递的对象
Person person = (Person) getIntent().getSerializable(MainActivity.EXTRA_PERSON);
4、使用Pracelable方式传递对象。(较前一种推荐这种方式传递对象)
//1.创建所传对象实体类并实现Pracelable接口。(write和read顺序一定要相同)
public class Persons implements Parcelable {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);//写出name
        dest.writeInt(age);//写出age
    }
    public static final Parcelable.Creator<Persons> CREATOR = new Parcelable.Creator<Persons>(){
        @Override
        public Persons createFromParcel(Parcel source) {
            Persons persons = new Persons();
            persons.name = source.readString();//读取name
            persons.age = source.readInt();//读取age
            return persons;
        }

        @Override
        public Persons[] newArray(int size) {
            return new Persons[size];
        }
    };

}

//2.添加传递值的对象
public static final String EXTRA_PERSONS= "persons";//键

Persons persons = new Persons();//创建对象并赋值
persons.setAge(20);
persons.setName("Tom");

Intent intent = new Intent(MainActivity.this,SecondActivity.class);

intent.putExtra(EXTRA_PERSONS,persons);//以键值对形式存放

startActivity(intent);
//3.取值传递的对象
Persons persons = (Persons) getIntent().getParcelableExtra(EXTRA_PERSONS);

5、Android基础之intent传值方法和传递大量数据方案

Intent传值补充


欢迎指出文中不足,或提供相关补充。
以上方法主要来源于《Android第一行代码》、《Android编程权威指南》,及本人学习整理所得。

相关文章

网友评论

      本文标题:Android——Intent传值

      本文链接:https://www.haomeiwen.com/subject/qjwirftx.html