Java 帮助创建可包裹类

Java 帮助创建可包裹类,java,android,Java,Android,我正在尝试创建一个Parcelable类。该类扩展了TableRow: import android.content.Context; import android.os.Parcel; import android.os.Parcelable; import android.widget.TableRow; public class AcmTableRow extends TableRow implements Parcelable{ private int index; public b

我正在尝试创建一个Parcelable类。该类扩展了TableRow:

import android.content.Context;
import android.os.Parcel;
import android.os.Parcelable;
import android.widget.TableRow;

public class AcmTableRow extends TableRow implements Parcelable{

private int index;
public boolean isSection;
private String volumeLink;
private String rowId;
private String cfr;
private static Context context;
public AcmTableRow(Context context) {   

    super(context);

}
public AcmTableRow(Context context, Parcel in) {            
    super(context);
    AcmTableRow.context = context;
    readFromParcel(in);
}

private void readFromParcel(Parcel in) {

    //strValue = in.readString();
    //intValue = in.readInt();
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {

    //dest.writeString(strValue);
    //dest.writeInt(intValue);
}


public void setIndex(int index) {
    this.index = index;
}

public int getIndex() {
    return index;
}

public void setRowId(String rowId) {
    this.rowId = rowId;
}

public String getRowId() {
    return rowId;
}

public void setCfr(String cfr) {
    this.cfr = cfr;
}

public String getCfr() {
    return cfr;
}

public void setVolumeLink(String volumeLink) {
    this.volumeLink = volumeLink;
}

public String getVolumeLink() {
    return volumeLink;
}   

public static final Parcelable.Creator<AcmTableRow> CREATOR = new Parcelable.Creator<AcmTableRow>() {
       public AcmTableRow createFromParcel(Parcel in) {            
           return new AcmTableRow(context, in);
       }
       public AcmTableRow[] newArray(int size) {
           return new AcmTableRow[size];
       }
   };

}

非常感谢您的任何解释或帮助

多谢各位


Phil

这是一个简单的工作包裹示例:

public class ParcelableExample implements Parcelable {
    private int intMember;
    private String stringMember;

    /*
     * Getters and setters
     * ....
     */
    /*
     * Constructors
     * ....
     */

     /*
      * Custom parcelable implementation
      */

     private ParcelableExample(Parcel in) {
         // notice that we are reading in the same order as we have written
         intMember = in.readInt();
         stringMember = in.readString();
     }

     @Override
     public int describeContents() {
         return hashCode();
     }

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

     @SuppressWarnings("rawtypes")
     public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
         public ParcelableExample createFromParcel(Parcel in) {
             return new ParcelableExample(in);
         }
         public ParcelableExample[] newArray(int size) {
             return new ParcelableExample[size];
         }
     }

这是一个简单的工作包裹示例:

public class ParcelableExample implements Parcelable {
    private int intMember;
    private String stringMember;

    /*
     * Getters and setters
     * ....
     */
    /*
     * Constructors
     * ....
     */

     /*
      * Custom parcelable implementation
      */

     private ParcelableExample(Parcel in) {
         // notice that we are reading in the same order as we have written
         intMember = in.readInt();
         stringMember = in.readString();
     }

     @Override
     public int describeContents() {
         return hashCode();
     }

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

     @SuppressWarnings("rawtypes")
     public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
         public ParcelableExample createFromParcel(Parcel in) {
             return new ParcelableExample(in);
         }
         public ParcelableExample[] newArray(int size) {
             return new ParcelableExample[size];
         }
     }

writeToParcel方法只是将对象展平为地块。当需要在活动之间传递对象时,将使用此选项。在您的情况下,它应该如下所示:

public void writeToParcel (Parcel dest, int flags)
{
    dest.writeInt(index);
    dest.writeBoolean(isSection);
    dest.writeString(volumeLink);
    dest.writeString(rowId);
    dest.writeString(cfr);      

}
我从未使用过readFromParcel,我也不确定您是否需要在这里使用。在下一个活动中调用适当的方法时,将从地块创建对象


请注意,您可能不想在parcelable类中传递上下文。我甚至不确定你能不能。稍后再次膨胀包裹时,需要指定上下文。

writeToParcel方法只是将对象展平为包裹。当需要在活动之间传递对象时,将使用此选项。在您的情况下,它应该如下所示:

public void writeToParcel (Parcel dest, int flags)
{
    dest.writeInt(index);
    dest.writeBoolean(isSection);
    dest.writeString(volumeLink);
    dest.writeString(rowId);
    dest.writeString(cfr);      

}
我从未使用过readFromParcel,我也不确定您是否需要在这里使用。在下一个活动中调用适当的方法时,将从地块创建对象


请注意,您可能不想在parcelable类中传递上下文。我甚至不确定你能不能。稍后再次膨胀包裹时,需要指定上下文。

为什么需要对视图进行包裹?我强烈感觉这些视图不应该通过
Intent
传递。也许您只需要将逻辑与视图(
TableRow
)分离,而不是扩展它?我的TableRow视图正在TableRow工厂中通过异步任务创建。这项任务非常耗时,需要拉入数据并构建视图,因此需要在UI线程之外完成。为什么需要打包视图?我强烈感觉这些视图不应该通过
Intent
传递。也许您只需要将逻辑与视图(
TableRow
)分离,而不是扩展它?我的TableRow视图正在TableRow工厂中通过异步任务创建。这项任务非常耗时,需要拉入数据并构建视图,因此需要在UI线程之外完成。请继续。我能够毫无问题地将上下文传递给parcelable类。谢谢你的帮助。你能告诉我你是如何把上下文传递到包裹里的吗?只是一个跟进。我能够毫无问题地将上下文传递给parcelable类。谢谢你的帮助。你能告诉我你是如何把上下文传递到包裹里的吗?