转:Activity之间的传值(常用数据类型,对象,对象集合)

文章转载于https://www.cnblogs.com/markdev/archive/2012/10/26/2740860.html

Activity之间的传值(常用数据类型,对象,对象集合)

我这是直接用Intent put值,也可以用Bundle。实现int、String、 boolean、和对应的数组、对象、对象集合之间的传值。

先看一张效果图:

这些值都是通过前一个activity传过来的打印出来的。

不多说,代码搞起。

首先是第一个Activity 赋值

MainAct.java

package com.harlan.act;
 
import java.util.ArrayList;
import com.harlan.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
 
/**
 *  Activity之间的传值
 * @author Harlan Song
 * @email mark_dev@163.com
 */
public class MainAct extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Intent intent=new Intent(MainAct.this,ShowAct.class);
        /**
         * 1 常见数据类型都可以通过下面方式。
         */
        //
         
        intent.putExtra("year", 2012);
        intent.putExtra("isValue", true);
        intent.putExtra("data", "this is a test data");
        intent.putExtra("IntArray",new int[]{1,2});
        intent.putExtra("StringArray", new String[]{"shanghai","ganzhou","wuhan"});
        intent.putExtra("BooleanArray", new boolean[]{true,false,true,false});
        //String集合
        ArrayList<String> arraylist=new ArrayList<String>();
        arraylist.add("list1");
        arraylist.add("list2");
        intent.putStringArrayListExtra("arraylist", arraylist);
        //传递对象
        intent.putExtra("student", new Student("wang",20 , "male"));
         
        ArrayList<BooK> list=new ArrayList<BooK>();
        BooK book;
        for (int i = 1; i < 5; i++) {
            book=new BooK("BookName"+i, 100+i, "BookAuthor"+i);
            list.add(book);
        }
         
        intent.putParcelableArrayListExtra("bookList", list);
        startActivity(intent);
         
    }
}


 传递的两个实体类下面解释一下

用户接收数据的并显示的另一个actvity

ShowAct.java

package com.harlan.act;
 
import java.util.ArrayList;
 
import com.harlan.R;
 
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
 
public class ShowAct extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.show);
        TextView tv=(TextView) findViewById(R.id.textView1);
        StringBuilder stringb=new StringBuilder();
        stringb.append("Int:"+getIntent().getIntExtra("year", 0)+"\n");
        stringb.append("Boolean:"+getIntent().getBooleanExtra("isValue", false)+"\n");
        stringb.append("String:"+getIntent().getStringExtra("data")+"\n");
        int[] intArray=getIntent().getIntArrayExtra("IntArray");
        stringb.append("IntArray:"+intArray[0]+","+intArray[1]+"\n");
        String[] stringArray=getIntent().getStringArrayExtra("StringArray");
        stringb.append("StringArray:"+stringArray[0]+","+stringArray[1]+"\n");
        boolean[] booleanArray=getIntent().getBooleanArrayExtra("BooleanArray");
        stringb.append("StringArray:"+booleanArray[0]+","+booleanArray[1]+"\n");
        Student student=(Student) getIntent().getSerializableExtra("student");
        stringb.append("Object:"+student.getName()+","+student.getAge()+","+student.getSex()+"\n");
        ArrayList<String> arraylist=getIntent().getStringArrayListExtra("arraylist");
        stringb.append("ArrayList:"+arraylist.get(0)+","+arraylist.get(1)+"\n");
        //对象集合
        ArrayList<BooK> bookList=getIntent().getParcelableArrayListExtra("bookList");
        stringb.append("\n"+"下面是对象集合数据"+"\n");
        BooK book;
        if(bookList!=null&&bookList.size()>0){
            for (int j = 0; j < bookList.size(); j++) {
                book=bookList.get(j);
                stringb.append("bookName"+book.getName()+"\n");
                stringb.append("bookPrice"+book.getPrice()+"\n");
                stringb.append("bookAuthor"+book.getAuthor()+"\n");
                stringb.append("--------------------------------"+"\n");
            }
             
        }
        tv.setText(stringb.toString());
         
    }
}


布局文件就没什么好说的,就是一个TextView

 

Student.java

package com.harlan.act;
 
import java.io.Serializable;
 
 
/**
 * 学习实体类
 * @author Harlan Song
 * @email mark_dev@163.com
 */
public class Student implements Serializable {
    private static final long serialVersionUID = -6752893368481996015L;
    private String name;
    private int age;
    private String sex;
    public Student(){}
    public Student(String name,int age,String sex){
        this.name=name;
        this.age=age;
        this.sex=sex;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
     
}


 要实现Serializable接口,关于Serializable看后面

BooK.java

package com.harlan.act;
 
import android.os.Parcel;
import android.os.Parcelable;
 
public class BooK implements Parcelable{
     
    private String name;
    private int price;
    private String author;
    public BooK(){}
    public BooK(String name,int price,String author){
        this.name=name;
        this.price=price;
        this.author=author;
    }
     
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getPrice() {
        return price;
    }
 
    public void setPrice(int price) {
        this.price = price;
    }
 
    public String getAuthor() {
        return author;
    }
 
    public void setAuthor(String author) {
        this.author = author;
    }
 
    @Override
    public int describeContents() {
        return 0;
    }
 
    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeString(this.name);
        parcel.writeInt(this.price);
        parcel.writeString(this.author);
         
    }
 
    public static final Parcelable.Creator<BooK> CREATOR=new Creator<BooK>() {
         
        @Override
        public BooK[] newArray(int i) {
            return new BooK[i];
        }
         
        @Override
        public BooK createFromParcel(Parcel parcel) {
            // TODO Auto-generated method stub
            return new BooK(parcel.readString(), parcel.readInt(), parcel.readString());
        }
    }; 
}

 要实现Parcelable接口。


关于Serializable,Parcelable两个接口我在网上找了一个资料,有兴趣的可以看一下。

--------------------------------------------------------

对于Android来说传递复杂类型,主要是将自己的类转换为基础的字节数组,Activity之间传递数据是通过Intent实现的。 Android序列化对象主要有两种方法,实现Serializable接口、或者实现Parcelable接口。实现Serializable接口是 Java
 SE本身就支持的,而Parcelable是Android特有的功能,效率比实现Serializable接口高,而且还可以用在进程间通信(IPC)中。实现Serializable接口非常简单,声明一下就可以了。而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。
Parcelable接口的作用:实现了Parcelable接口的实例可以将自身的状态信息(状态信息通常指的是各成员变量的值)写入Parcel,也可以从Parcel中恢复其状态。
 Parcel用来完成数据的序列化传递。下面就介绍一下实现Parcelable接口的方法。
 通过实现Parcelable接口序列化对象的步骤:

1、实现Parcelable接口。
2、并且实现Parcelable接口的public
 void writeToParcel(Parcel dest, int flags)方法 。
3、自定义类型中必须含有一个名称为CREATOR的静态成员,该成员对象要求实现Parcelable.Creator接口及其方法。
简而言之:通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象。也可以将Parcel看成是一个流,通过writeToParcel把对象写到流里面,在通过createFromParcel从流里读取对象,只不过这个过程需要你来实现,因此写的顺序和读的顺序必须一致。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值