借助Intent实现Android工程中Activity之间Java对象的传递——实现Parcelable接口

借助Intent实现Android工程中Activity之间Java对象的传递有两种方式:一种所传递对象实现了Serializable接口;另一种是所传递对象实现了Parcelable接口,本博客总结传递对象实现Parcelable接口的情况下如何实现Java对象传递:

代码1、添加名为“User.java”的文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package com.ghj.vo;
 
import android.os.Parcel;
import android.os.Parcelable;
 
public class User implements Parcelable{
 
     private String id;
     private String name;
 
     public User(String id, String name) {
         this .id = id;
         this .name = name;
     }
     
     /**
      * 实现Parcelable接口的writeToParcel方法,将需要传递的数据写入Parcel“容器”中,以便从 Parcel“容器”获取数据。
      */
     @Override
     public void writeToParcel(Parcel out, int flags) {
         out.writeString(id);
         out.writeString(name);
     }
 
     /**
      * 实例化静态内部对象CREATOR实现接口Parcelable.Creator。注意:其中public static final一个都不能少,内部对象CREATOR的名称不能改变且必须全部大写。
      */
     public static final Creator CREATOR = new Creator(){
         
         @Override
         public User[] newArray( int size){
             return new User[size];
         }
         
         /**
          * 从Parcel“容器”中读取传递数据值,并封装成单个User实体
          */
         @Override
         public User createFromParcel(Parcel in){
             return new User(in.readString(), in.readString());
         }
     };
 
     public String getId() {
         return id;
     }
     public void setId(String id) {
         this .id = id;
     }
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this .name = name;
     }
 
     /**
      * 描述内容,一般返回0即可。
      */
     @Override
     public int describeContents() {
         return 0 ;
     }
}

说明:上面User类通过实现Parcelable接口的writeToParcel方法将需要传递的数据封装成Parcel对象,再通过内部实现类实现Parcelable.Creator接口的createFromParcel方法将数据从Parcel对象中获取出来并再次封装成User对象。值得注意的是将传递的数据写入Parcel中的顺序(参见实现writeToParcel方法时)要和从Parcel中获取数据的顺序(参见实现createFromParcel方法时)一致。

代码2、添加名为“FromActivity.java”的文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.ghj.activity;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
import com.ghj.vo.User;
 
public class FromActivity extends Activity implements OnClickListener {
 
     private Button button;
     
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.from);
         button = (Button)findViewById(R.id.ok_btn);
         button.setOnClickListener( this );
     }
 
     @Override
     public void onClick(View view) {
         Intent intent  = new Intent(FromActivity. this , ToActivity. class );
         Bundle bundle = new Bundle();
         User user = new User( "56862586-108e-4749-93ca-440cd576ba92" , "王翔" );
         bundle.putParcelable( "user" , user);
         intent.putExtras(bundle);
         startActivity(intent);
     }
}

代码3、添加名为“ToActivity.java”的文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.ghj.activity;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
 
import com.ghj.vo.User;
 
public class ToActivity extends Activity{
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.to);
         TextView textView = (TextView)findViewById(R.id.show_user_info);
         
         Intent intent = getIntent();
         User user  = intent.getParcelableExtra( "user" );
         textView.setText(user.getId() + ":" + user.getName());
     }
}

代码4、添加名为“from.xml”的文件:

?
1
2
3
4
5
6
"http://schemas.android.com/apk/res/android" android:layout_width= "match_parent" android:layout_height= "match_parent" android:orientation= "vertical" >
 
    
 

代码5、添加名为“to.xml”的文件:

?
1
2
3
4
5
6
"http://schemas.android.com/apk/res/android" android:layout_width= "match_parent" android:layout_height= "match_parent" android:orientation= "vertical" >
 
     "@+id/show_user_info" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:layout_centerhorizontal= "true" android:layout_centervertical= "true" >
 

你可能感兴趣的:(android)