使用ArrayList <object> </object>的Android Parcelable实现

时间:2011-11-19 09:00:59

标签: android android-activity arraylist parcelable

所以我正在实现一个测试应用程序,我将在其中创建一个Tournament对象作为Parcelable并在意图之间传递它们。 锦标赛包括: 。锦标赛名称 。规则 。匹配玩家的规则(随机/手动) 。玩家的数组列表

这是我到目前为止所做的:

Tournament.java

public class TournamentData implements Parcelable {
private String tourName;
private int bestOf;
private boolean isRandom;
private ArrayList<Player> playerList;

public TournamentData(String name, int tourBestOf, boolean random) {
    this.tourName = name;
    this.bestOf = tourBestOf;
    this.isRandom = random;
}

public void addPlayer(Player newPlayer) {
    this.playerList.add(newPlayer);
}

public ArrayList<Player> getPlayerList() {
    return playerList; 
}

    /* getters and setters excluded from code here */

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

public void writeToParcel(Parcel out, int flags) {
    // TODO Auto-generated method stub

}

Player.java

public class Player {

private String playerName;
private String playerEmail;

public Player(String name, String email) {
    this.playerName = name;
    this.playerEmail = email;
}
    /* getter and setters are excluded */

}

我是Android的新手(我的意思是非常新的;我想是10个小时)。所以我想知道: 。是否可以根据具有ArrayList的Tournament对象的规范创建Parcelable对象? 。如何将所有锦标赛数据存储到Parcelable对象中并从其他活动访问它们? (即A和B)。

2 个答案:

答案 0 :(得分:2)

这里是代码,告诉你如何parcle a arraylist

public class ParcleListTopic implements Parcelable{
    private List<ParcleTopic> list;
    private ArrayList<HoldListTopic> listh=new ArrayList<HoldListTopic>();
    public ArrayList<HoldListTopic> GetListTopic()
    {
        for(int i=0;i<list.size();i++)
        {
            listh.add(list.get(i).GetHold());
        }
        return listh;
    }
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeTypedList(list);
    }
    public ParcleListTopic(Parcel in)
    {
        in.readTypedList(list,ParcleTopic.CREATOR);

    }
    public ParcleListTopic(List<ParcleTopic> list)
    {
        this.list=list;
    }
    public static final Parcelable.Creator<ParcleListTopic> CREATOR = new Parcelable.Creator<ParcleListTopic>(){
          public ParcleListTopic createFromParcel(Parcel s)
          {
              return new ParcleListTopic(s);
          }
          public ParcleListTopic[] newArray(int size) 
          {
                return new ParcleListTopic[size];
          }
    };
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }
}


public class ParcleTopic implements Parcelable
{
    HoldListTopic hold;
    public ParcleTopic(HoldListTopic hold)
    {
        this.hold=hold;
    }
    public HoldListTopic GetHold()
    {
        return hold;
    }
    public int describeContents() 
    {
        return 0;
    }
    public void writeToParcel(Parcel dest, int flags)
    {
        dest.writeString(hold.Title);
        dest.writeString(hold.Date);
        dest.writeInt(hold.NumberComment);
        dest.writeInt(hold.ID);
    }
    public ParcleTopic(Parcel in)
    {
        hold.Title=in.readString();
        hold.Date=in.readString();
        hold.NumberComment=in.readInt();
        hold.ID=in.readInt();
    }
    public static final Parcelable.Creator<ParcleTopic> CREATOR = new Parcelable.Creator<ParcleTopic>()
    {
          public ParcleTopic createFromParcel(Parcel s)
          {
              return new ParcleTopic(s);
          }
          public ParcleTopic[] newArray(int size) 
          {
                return new ParcleTopic[size];
          }
    }; }

答案 1 :(得分:0)

很多这些事情都变成了R.P.C. - 我会用传统的Java编写工作的主要部分然后尝试制作......

是的,果然:

  

可以通过IBinder发送的消息(数据和对象引用)的容器。 Parcel可以包含将在IPC的另一侧展开的扁平数据(使用此处用于编写特定类型的各种方法,或通用Parcelable接口),以及对将导致另一方接收的实时IBinder对象的引用代理IBinder与包裹中的原始IBinder连接。

换句话说,Parcel是进程间通信的一种形式....

你必须重新思考基础模型,因为这不是10,000个请求第二个服务器 - 它是一个手持式消费者设备,如果必须由于它在哪里可以将指针从流程表中拉出来它运作

我已学会转到http://android-developers.blogspot.com/?hl=en

的博客标签

要非常小心,不要深入挖掘需要在工作线程中的内容,并注意Java易于使用的丰富同步原语

  

多线程性能

Tim Bray于2010年7月19日上午11:41发表 [本文由Gilles Debunne撰写,他是Android组的一名工程师,喜欢多任务。 - 蒂姆布雷]

它在博客中 - 更好的起点