android学习笔记(3)

在 Activity 之间传递参数

1 传递简单数据

首先完成页面的跳转,http://blog.csdn.net/a905206271/article/details/70193889,里面有,实现跳转后,

Intent i=new Intent(MainActivity.this,Main2Activity.class);
i.putExtra("data","test");
startActivity(i);

putExtra有很多重置函数,第一个参数是key用来唯一识别这个数据,第二个参数是传入的数值。

这样就能把内容传到另一activity,在另一activity中通过Intent i=getIntent();来接受数据

接受到数据之后,就想办法将内容显示出来。先拖一个text控件,然后在源码中通过findViewById;
找到该控件
具体代码为

//创建一个TextView类型的对象
private  TextView tv;
//获取控件,并且强制转换
//findViewById获取的是一个view值,所以如果不转换,就会报错
tv= (TextView) findViewById(R.id.tv);
//通过.setText将值写入,这里是通过data找到数据的。
tv.setText(i.getStringExtra("data"));


2 数据包传递

用bundle来传递数据包

//先建立一个bundle对象

Bundle b=new Bundle();
//用put来传入数据,根据传入数据类型的不同,使用的函数也不同
b.putString("name","帅李岩");

b.putString("name1","丑汪浩");
b.putInt("age",22);
//使用putExtras来将数据传递,注意包用putExtras,不过也可以用i.putExtra("data",b);

i.putExtras(b);

在接受代码中

Bundle data=i.getExtras("data");

 tv.setText(String.format("name=%s age:=%d ",data.getString("name"),data.getInt("age")));
通过data.get来获取传入的数据,如果之前使用的是
i.putExtra("data",b);
则使用
Bundle data=i.getBundleExtra("data");

关于获取数据,可以用
data.getString("name1","傻波波")
如果没有找到,就输出傻波波,如果有就输入原有值,这样可以防止为空

3 传递值对象

首先在包里创建一个类


然后完成定义

private String name;

private  int age;
public Person(String name, int age){
    this.age=age;
    this.name=name;
}
 
 
直接右键找到generate

然后



点击Getter and Setter


然后点击ok就行了。


然后在MainActivity中按之前的方法写

putExtra可以传入类
i.putExtra("data",new Person("liyan",2));
这会报错,查看错误,有两种方法,
public class Person implements Serializable
public class Person implements Parcelable

serializable比较好用,这是java内置的接口

系统会自动帮你完成序列化,但是和Parcelable比,效率低


获取信息

Person person= (Person) i.getSerializableExtra("data");
写入信息

tv= (TextView) findViewById(R.id.tv);
tv.setText(String.format("name2=%s,age2=%d",person.getName(),person.getAge()));

Parcelable使用复杂一些,当使用Parcelable接口的时候会报错,根据提示实现两个方法

public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {

}
先修改第二个函数
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(getName());
    dest.writeInt(getAge());

}

然后

用自动提醒获取代码,记得加分号

public static final Creator<Person>CREATOR=new Creator<Person>() {
    @Override
    public Person createFromParcel(Parcel source) {
        return null;
    }

    @Override
    public Person[] newArray(int size) {
        return new Person[0];
    }
};
然后修改

public static final Creator<Person>CREATOR=new Creator<Person>() {
    @Override
    public Person createFromParcel(Parcel source) {

        return new Person(source.readString(),source.readInt());
    }

    @Override
    public Person[] newArray(int size) {
        return new Person[size];
    }
};
记得修改一下获取代码
//Person person= (Person) i.getSerializableExtra("data");
Person person=i.getParcelableExtra("data");

如果有多个同种数据,可以使用Bundle
也可以这样
我新建了一个name1
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(getName());
    dest.writeString(getName1());
    dest.writeInt(getAge());


}
public static final Creator<Person>CREATOR=new Creator<Person>() {
    @Override
    public Person createFromParcel(Parcel source) {


        return new Person(source);
    }

    @Override
    public Person[] newArray(int size) {
        return new Person[size];
    }
};
public Person(Parcel source){
    name1=source.readString();
    name=source.readString();
    age=source.readInt();
}

记得修改两个activity。


4 获取 Activity 的返回参数


现在第二个activity中拖一个button和editText,设置点击响应,在响应函数中

//intent用来进行不同activity之间的交互

Intent i=new Intent();
//获取写入的数据,写入i中
i.putExtra("data",editText.getText().toString());
//利用result来使其返回
setResult(1,i);
//然后使用finish结束,使其返回上一activity
finish();

在原activity中添加代码,

startActivity(i);改为

startActivityForResult(i,0);
使其可以回传

然后添加函数

用onac就可以直接提醒出代码
requestCode是请求码
startActivityForResult(i,0);即这里面的0
resultCode是响应码
setResult(1,i);级这里面的1
然后获取textview的值



获取了返回参数

 
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值