安卓学习(二)传递值

安卓学习传递值

准备:

1.新建两个android Activity,我的是Transmit0808Activity1和Transmit0808Activity2(这个只是个人命名习惯,功能+日期+相关的Activity);
2.A.xml放置一个button按钮用来测试,B.xml放置一个TextView用来接收从A页面传递过来的数据。

一:传递简单数据

Transmit0808Activity1.java
private Button button;
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transmit0808_activity1);

        button = (Button) findViewById(R.id.stbtn);
        button.setOnClickListener(new OnClickListener() {

            public void onClick(View arg0) {

                Intent i = new Intent(Transmit0808Activity1.this,Transmit0808Activity2.class);
                //方式一:传递简单数据:
                i.putExtra("data", "我传过来啦");   //data是传的数据的名字,后面的是内容

                startActivity(i);
            }
        });
    }
Transmit0808Activity2.java
    private TextView tv;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transmit0808_activity2);

        Intent i = getIntent();  //来获取接收前面传来的数据

        tv = (TextView) findViewById(R.id.tev);

        tv.setText(i.getStringExtra("data"));  //让这个控件来显示数据
    }
二:传递数据包Bundle

Transmit0808Activity1.java
private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transmit0808_activity1);

        button = (Button) findViewById(R.id.stbtn);
        button.setOnClickListener(new OnClickListener() {

            public void onClick(View arg0) {

                Intent i = new Intent(Transmit0808Activity1.this,Transmit0808Activity2.class);

                //方式二:传递数据包Bundle
                Bundle b = new Bundle();
                b.putString("name", "张三");
                b.putInt("age", 20);
                i.putExtras(b);

                startActivity(i);
            }
        });
    }
Transmit0808Activity2.java
    private TextView tv;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transmit0808_activity2);

        Intent i = getIntent();  //来获取接收前面传来的数据
        Bundle data = i.getExtras();

        tv = (TextView) findViewById(R.id.tev);

        tv.setText(String.format("name=%s, age=%d",data.getString("name"),data.getInt("age")));
    }
三:传递值对象

首先创建一个User对象,里面可以定义一些成员变量,这里面又牵涉到一个序列化的问题,一种是使用Java里面的Serializable进行序列化,一种是使用专门为移动设备设置Parcelable进行序列化,可以尝试体会下差别

第一种:使用Serializable
User.java
   public class User implements Serializable {
   //使用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;
    }
}
Transmit0808Activity1.java
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transmit0808_activity1);

        button = (Button) findViewById(R.id.stbtn);
        button.setOnClickListener(new OnClickListener() {

            public void onClick(View arg0) {

                Intent i = new Intent(Transmit0808Activity1.this,Transmit0808Activity2.class);

                //方式三:传递值对象
                i.putExtra("user",new User("张三",20));
                startActivity(i);
            }
        });
    }
Transmit0808Activity2.java
   private TextView tv;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transmit0808_activity2);

        Intent i = getIntent();
        tv = (TextView) findViewById(R.id.tev);

        User user = (User) i.getSerializableExtra("user");

        tv.setText(String.format("User info(name=%s,age=%d)",user.getName(),user.getAge()));
    }
第二种使用Parcelable
User.java
   public class User implements Parcelable {

    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;
    }

    //实现里边的两个方法,把里边的数据保存起来方便传递
    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(getName()); 
        dest.writeInt(getAge());
    }

    public static final Creator<User> CREATOR = new Creator<User>() {

        @Override
        public User[] newArray(int size) {

            return new User[size];
        }

        //通过一个Parcel来创建一个对象
        public User createFromParcel(Parcel source) {

            return new User(source.readString(),source.readInt());
        }
    };
}
Transmit0808Activity1.java同上不需要修改
Transmit0808Activity2.java
   private TextView tv;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transmit0808_activity2);

        Intent i = getIntent();
        tv = (TextView) findViewById(R.id.tev);

        User user = i.getParcelableExtra("user");

        tv.setText(String.format("User info(name=%s,age=%d)",user.getName(),user.getAge()));
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值