2011-11-18 22 views
14

Tôi muốn chuyển đối tượng giữa hai hoạt động trong Android đã đưa tôi đến các lớp có thể chuyển nhượng. Tôi không cố gắng chuyển đổi lớp hiện tại của mình nhưng không hiểu phương thức Parcelable.Creator.Android: Tạo lớp học có thể chuyển nhượng

Đây là những gì tôi có cho đến nay

public class Account implements Parcelable{ 

/** 
* Declare private variables 
*/ 

private String fName; 
private String lName; 
private String screenName; 
private String email; 
private String level; 
private int userId; 
//private Context myContext; 

/** 
* Account constructor 
*/ 

public Account(String fName, String lName, String sName, String email, String level, String x) throws Exception{  


    /**Parse userId into int */ 
    this.userId = Integer.parseInt(x); 

    /**Select from DB user details */ 


    /**Initialize variables with results */ 
    this.setfName(fName); 
    this.setlName(lName); 
    this.setScreenName(sName); 
    this.setEmail(email); 
    this.setLevel(level); 



} 

@Override 
public int describeContents() { 
    // TODO Auto-generated method stub 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel out, int flags) { 
    // TODO Auto-generated method stub 
    out.writeString(fName); 
    out.writeString(lName); 
    out.writeString(screenName); 
    out.writeString(email); 
    out.writeString(level); 
    out.writeInt(userId); 

} 

// this is used to regenerate your object. All Parcelables must have a CREATOR that implements these two methods 
public static final Parcelable.Creator<Account> CREATOR = new Parcelable.Creator<Account>() { 
    public Account createFromParcel(Parcel in) { 
     return new Account(in); 
    } 

    public Account[] newArray(int size) { 
     return new Account[size]; 
    } 
}; 



/** 
* Getters and setters for all variables from Account class 
*/ 

public int getUserId(){ 
    return userId; 
} 

public String getScreenName() { 
    return screenName; 
} 

public void setScreenName(String screenName) { 
    this.screenName = screenName; 
} 

public String getfName() { 
    return fName; 
} 

public void setfName(String fName) { 
    this.fName = fName; 
} 

public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

public String getLevel() { 
    return level; 
} 

public void setLevel(String level) { 
    this.level = level; 
} 

public String getlName() { 
    return lName; 
} 

public void setlName(String lName) { 
    this.lName = lName; 
} 



} 

Cảm ơn trước.

Trả lời

11

Trường này là cần thiết để Android có thể tạo đối tượng mới, riêng lẻ hoặc làm mảng. Điều này cũng có nghĩa là bạn có thể sử dụng hàm tạo mặc định để tạo đối tượng và sử dụng một phương thức khác để hyrdate nó khi cần thiết.

Nhìn này Android – Parcelable

Online tool for creating Parcelable class

http://www.appance.com/tag/parcelable/

+2

"Trường này cần thiết cho Android để có thể tạo đối tượng mới" - nhưng * khi *? –

18

Đây là một công cụ tuyệt vời cho việc triển khai parcelable Android.

Parcelabler by Dallas Gutauckis

+1

Công cụ này thực sự hữu ích. Tôi đã tìm thấy loại công cụ này.Cám ơn bạn đã chia sẻ điều này với chúng tôi. –

+0

@AndreyPetrov Bây giờ là. – Sufian

+1

trang không hợp lệ nữa –

0

On GitHub bạn có thể tìm thấy một số mã tôi đã viết một số thời gian trước đây cho đơn giản hóa việc xử lý Parcelables (ví dụ như bằng văn bản cho và đọc từ bưu kiện, đơn giản hóa mã khởi tạo cho CREATOR).

Viết một bưu kiện:

parcelValues(dest, name, maxSpeed, weight, wheels, color, isDriving); 

nơi màu sắc là một enum và isDriving là một boolean, ví dụ.

Đọc từ một bưu kiện:

// [...] 
color = (CarColor)unparcelValue(CarColor.class.getClassLoader()); 
isDriving = (Boolean)unparcelValue(); 

Tạo một CREATOR cho các lớp:

public static final Parcelable.Creator<Car> CREATOR = 
    Parceldroid.getCreatorForClass(Car.class); 

... hoặc cho enums:

public static final Parcelable.Creator<CarColor> CREATOR = 
    Parceldroid.getCreatorForEnum(CarColor.class); 

Chỉ cần có một cái nhìn tại " ParceldroidVí dụ "Tôi đã thêm vào dự án.

0

Việc truyền dữ liệu giữa các hoạt động có thể được thực hiện bằng cách sử dụng tuần tự hóa cũng như Gói. (why)

Có một plugin trong Android cho phép bạn chèn mã có thể chuyển nhượng cho các trường trong lớp. Bạn có thể tìm thấy nó từ menu File> Settings> Plugins> Android codeable generator generator.

Và sử dụng phím tắt alt + chèn giống như getter và setter để sử dụng plugin.

Các vấn đề liên quan