我正在嘗試通過製作輔助程序來玩我玩的棋盤遊戲來學習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。我仍然希望在某個時候聽到更具體的理由。謝謝你的時間。 –