我正在尝试通过制作辅助程序来玩我玩的棋盘游戏来学习Android开发。我遇到了与在Pass custom object between activities中回答的情况非常相似的情况。我的情况的不同之处在于所讨论的自定义对象都是扩展抽象类的。传递对象在活动之间延伸抽象类
抽象类表示一个芯片(相当于一个卡游戏明智),并且如下:
import java.util.ArrayList;
public abstract class Chip{
protected String name;
protected int imageID;
protected ArrayList<String> chipColors;
protected ArrayList<String> chipTypes;
public String toString(){
return name;
}
//Getters
public String getName(){ return name; }
public int getImageID() { return imageID; }
public String getSet() { return set; }
//Figure out how I need to deal with colors/types when I get there
}
一类,将延伸芯片的一例:
public class ChipA extends Chip{
public ChipA(){
super();
name = "Chip A";
imageID = R.drawable.chipa;
set = "Basic";
chipTypes = new ArrayList<String>();
chipTypes.add("typeA");
chipColors = new ArrayList<String>();
chipColors.add("red");
chipColors.add("green");
}
}
I” m采取这种方法,以便我可以创建适当类型的新芯片,只需拨打new ChipA()
我需要的地方,而不是new Chip(<long list of arguments that describe Chip A>)
。我需要将这些芯片的集合从一个活动传递到另一个活动。我已经在我的代码中解决了这个问题,通过存储我想要在全球范围内传递的芯片,如this article中所述,但文章的结尾建议使用意向附加代替这种操作。有人能更清楚地解释为什么吗?这只是惯例吗?如果仅仅是可读性的问题,这种方法看起来相对紧凑和可读。
从阅读中可以明显看出,使用Intent extras在活动之间传递任意类的预期方式是让它们实现Parcelable
。但是,由于我正在处理有关课程的许多子类,这意味着要为每个子类添加writeToParcel
和Parcelable.Creator
。 (describeContents()
似乎并不重要,据我了解,我可以在基本的抽象类中实现它。)我可能会在这里有很多子类,这意味着要添加大量的重复代码。在这种情况下,执行Parcelable
仍然被认为是首选方法?我是否错过了能够减少冗余代码的东西?如果可能,我宁愿保持我的Chip子类非常紧凑。
请温柔一点,我是堆栈溢出和Android开发的新手。
可不可以给的东西,可能会导致应用一些例子或连结更多描述的文章?我实际上已经考虑使用Application类来保存选项菜单中的信息;这似乎是自然而然的做法。如果真的那么不可靠,我将不得不改变我对选项菜单的计划。 –
对不起,没有链接,我只是通过经验来了解这一点,因为我不得不考虑如何处理这种模式。我想应用程序对象被破坏的主要原因是简单的内存不足。要解决这个问题,您必须实现Parcelable来保存/恢复您的应用程序状态。只需在第一时间实施它就可以为您节省一些时间。 – Teovald
我会为你付出代价,然后重构我的代码,然后使用Parcelable。我仍然希望在某个时候听到更具体的理由。谢谢你的时间。 –