219 views

Android Intent传递对象

Activity之间通过Intent传递值,支持基本数据类型和String对象及它们的数组对象byte、byte[]、char、char[]、boolean、boolean[]、short、short[]、int、int[]、long、long[]、float、float[]、double、double[]、String、String[]。

本文讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口。

Demo程序:

第一步:新建一个Android工程命名为ObjectTranDemo:

第二步:修改main.xml布局文件,代码如下:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
<TextView   
    android:layout_width="fill_parent"  
    android:layout_height="wrap_content"  
    android:text="Welcome to Mr wei’s blog."/> 
<Button 
    android:id="@+id/button1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Serializable"/> 
<Button 
    android:id="@+id/button2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Parcelable"/> 
</LinearLayout>

第三步:新建两个类,Person.java实现Serializable接口,Book.java实现Parcelable接口,代码分别如下:

public class Person implements Serializable { 
    private static final long serialVersionUID = -7060210544600464481L;  
    private String name
    private int age
    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
    }      
}

Book.java:

public class Book implements Parcelable { 
    private String bookName
    private String author
    private int publishTime
     
    public String getBookName() { 
        return bookName
    } 
    public void setBookName(String bookName) { 
        this.bookName = bookName
    } 
    public String getAuthor() { 
        return author
    } 
    public void setAuthor(String author) { 
        this.author = author
    } 
    public int getPublishTime() { 
        return publishTime
    } 
    public void setPublishTime(int publishTime) { 
        this.publishTime = publishTime
    } 
     
    public static final Parcelable.Creator<Book> CREATOR = new Creator<Book>() { 
        public Book createFromParcel(Parcel source) { 
            Book mBook = new Book(); 
            mBook.bookName = source.readString(); 
            mBook.author = source.readString(); 
            mBook.publishTime = source.readInt(); 
            return mBook
        } 
        public Book[] newArray(int size) { 
            return new Book[size]; 
        } 
    }; 
     
    public int describeContents() { 
        return 0
    } 
    public void writeToParcel(Parcel parcel, int flags) { 
        parcel.writeString(bookName); 
        parcel.writeString(author); 
        parcel.writeInt(publishTime); 
    } 
}

第四步:修改ObjectTranDemo.java,再新建两个Activity,一个是ObjectTranDemo1.java,别一个是ObjectTranDemo2.java。分别用来显示Person对像和Book对象数据,代码分别如下:

ObjectTranDemo.java:

public class ObjectTranDemo extends Activity implements OnClickListener { 
     
    private Button sButton,pButton
    public  final static String SER_KEY = "com.tutor.objecttran.ser"
    public  final static String PAR_KEY = "com.tutor.objecttran.par"
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main);    
        setupViews(); 
         
    } 
     
    public void setupViews(){ 
        sButton = (Button)findViewById(R.id.button1); 
        pButton = (Button)findViewById(R.id.button2); 
        sButton.setOnClickListener(this); 
        pButton.setOnClickListener(this); 
    } 
    //Serializeable传递对象的方法 
    public void SerializeMethod(){ 
        Person mPerson = new Person(); 
        mPerson.setName("frankie"); 
        mPerson.setAge(25); 
        Intent mIntent = new Intent(this,ObjectTranDemo1.class); 
        Bundle mBundle = new Bundle(); 
        mBundle.putSerializable(SER_KEY,mPerson); 
        mIntent.putExtras(mBundle); 
         
        startActivity(mIntent); 
    } 
    //Pacelable传递对象方法 
    public void PacelableMethod(){ 
        Book mBook = new Book(); 
        mBook.setBookName("Android Tutor"); 
        mBook.setAuthor("Frankie"); 
        mBook.setPublishTime(2010); 
        Intent mIntent = new Intent(this,ObjectTranDemo2.class); 
        Bundle mBundle = new Bundle(); 
        mBundle.putParcelable(PAR_KEY, mBook); 
        mIntent.putExtras(mBundle); 
         
        startActivity(mIntent); 
    } 
    //铵钮点击事件响应 
    public void onClick(View v) { 
        if(v == sButton){ 
            SerializeMethod(); 
        }else{ 
            PacelableMethod(); 
        } 
    } 
}

ObjectTranDemo1.java:

public class ObjectTranDemo1 extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
         
        TextView mTextView = new TextView(this); 
        Person mPerson = (Person)getIntent().getSerializableExtra(ObjectTranDemo.SER_KEY); 
        mTextView.setText("You name is: " + mPerson.getName() + "/n"+ 
                "You age is: " + mPerson.getAge()); 
         
        setContentView(mTextView); 
    } 
}

ObjectTranDemo2.java:

public class ObjectTranDemo2 extends Activity { 
  
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        TextView mTextView = new TextView(this); 
        Book mBook = (Book)getIntent().getParcelableExtra(ObjectTranDemo.PAR_KEY); 
        mTextView.setText("Book name is: " + mBook.getBookName()+"/n"+ 
                          "Author is: " + mBook.getAuthor() + "/n" + 
                          "PublishTime is: " + mBook.getPublishTime()); 
        setContentView(mTextView); 
    } 
}

第五步:修改AndroidManifest.xml文件:

<activity android:name=".ObjectTranDemo" 
android:label="@string/app_name"> 
<intent-filter> 
<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 
</activity> 
<activity android:name=".ObjectTranDemo1"></activity> 
<activity android:name=".ObjectTranDemo2"></activity>

程序效果图

效果1:首界面:

效果2:点击Serializable按钮:

效果3:点击Parcelable按钮:

原文链接:http://mingkg21.iteye.com/blog/438913

作者:mingkg21

无觅相关文章插件,快速提升流量

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>