Android学习笔记(二)Activiy学习——界面传值

来源:互联网 发布:人员去向软件 编辑:程序博客网 时间:2024/05/29 17:05

Activity之间传值方法

先创建A.B两个Activiy,在A与B中分别创建一个按钮button,同时分别创建文本框TextView


Intent传值

在A activity中创建按钮监听

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        //创建一个Intent,能够打开B Activiy        Intent i = new Intent(MainActivity.this,Main2Activity.class);        //传入数据,参数一传数据名 参数二传数据        i.putExtra("tag","hello world");        startActivity(i);    }});
在B activity获取到数据

private TextView txView;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main2);    Intent i = getIntent();    txView = (TextView) findViewById(R.id.TxView);    txView.setText(i.getStringExtra("data"));}


Bundle数据包传值

在A activity中创建按钮监听

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        Intent i = new Intent(MainActivity.this,Main2Activity.class);        Bundle b = new Bundle();        b.putInt("int",123);        b.putString("string","hello world");        //可以直接添加到B        i.putExtras(b);        //也可以传递Bundle        i.putExtra("bundle",b);        startActivity(i);    }});

在B activity获取到数据

Intent i = getIntent();Bundle data = i.getExtras();txView = (TextView) findViewById(R.id.TxView);//若没有值,可以设置默认值txView.setText( String.format("int = %d string = %s name = %s",data.getInt("int"),data.getString("string"),data.getString("name","default")));//通过key查找bundleBundle data1 = i.getBundleExtra("bundle");


传递自定义类

//传递类时,两种方法,Serializable和Parcelable    //Serializable直接在初始化时传递就可以(速度慢,使用简单)    //Parcelable需要实现系统的两个方法(速度快,比较支持,使用复杂)

创建class类User

public class User implements Serializable{    private String name;    private int age;    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public User(String name,int age){        this.name = name;        this.age = age;    }}

在A activity中

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        Intent i = new Intent(MainActivity.this,Main2Activity.class);        i.putExtra("user",new User("123",3));        startActivity(i);    }});

在B activity中获取

User user = (User)i.getSerializableExtra("123");txView.setText(String.format("%s %d",user.getName(),user.getAge()));


使用Parcelable传递类时

public class User implements Parcelable{    private String name;    private int age;    protected User(Parcel in) {        name = in.readString();        age = in.readInt();    }    @Override    public void writeToParcel(Parcel dest, int flags) {        //保存数据        dest.writeString(name);        dest.writeInt(age);    }    @Override    public int describeContents() {        return 0;    }    //创建Creator    public static final Creator<User> CREATOR = new Creator<User>() {        @Override        public User createFromParcel(Parcel in) {            //in.readBundle()使用bundle可以写任意数据            //修改返回值            return new User(in.readString(),in.readInt());        }        @Override        public User[] newArray(int size) {            return new User[size];        }    };    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    //构造方法    public User(String name,int age){        this.name = name;        this.age = age;    }}

获取来自B activity的返回值

在button监听里面添加

Intent i = new Intent(MainActivity.this,Main2Activity.class);

startActivityForResult(i,0);

重写方法

//resultCode为result的返回码,data为Intent返回的数据@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    data.getStringExtra("data");}




















0 0
原创粉丝点击