2011-09-01 43 views
4

我想創建一個包含對象的數據的ArrayList(就像地址和屬性列表一樣(非常複雜)),我在想:如何讓一個對象可訪問(以及可編輯)由所有活動,而不僅僅是一個它instanciated?在Android中創建一個可被所有Activites訪問的對象

基本上這:

  1. 創建活動2陣列中的活動1次
  2. 訪問同一陣列和3
  3. ???
  4. 利潤。

回答

11

最簡單的方法做,這是通過創建一個單身訪問類的實例。這是一種只能創建一次的對象,如果您嘗試再次訪問它,它將返回對象的現有實例。 在裏面你可以容納你的數組。

public class Singleton { 
    private static final Singleton instance = new Singleton(); 

    // Private constructor prevents instantiation from other classes 
    private Singleton() { 
    } 

    public static Singleton getInstance() { 
     return instance; 
    } 

} 

瞭解更多關於單: http://en.wikipedia.org/wiki/Singleton_pattern

+0

感謝您的回答!這也是最有效的方式嗎?單源有效的資源是多少? –

+3

Singleton的壞處:由於沒有對象的實際所有者,garbagecollector永遠不會將其從內存中移除,所以只要應用程序處於活動狀態(直到onDestroy),它就會佔用該內存。但是,我們也可以認爲你不必一直創建新的對象,這使你更快的速度和更少的內存使用。 – Nic

0

你應該讓靜態和任何其他活動訪問.....

6

您可以擴展應用程序類。並在那裏添加你的數組。

您可以使用此命令

MyApplication appContext = (MyApplication)getApplicationContext(); 
2

那麼你可以創建一個常量類,並聲明您ArrayList的一個靜態變量。

1)

Class ConstantCodes{ 

     public static ArrayList<MyClass> list = new ArrayList<MyClass>; 
    } 

來自世界各地要按只是ConstantCodes.list

2.這將是訪問),您可以通過應用程序類這樣

class Globalclass extends Application { 

    private String myState; 

    public String getState(){ 
    return myState; 
    } 
    public void setState(String s){ 
    myState = s; 
    } 
} 

class TempActivity extends Activity { 

    @Override 
    public void onCreate(Bundle b){ 
    ... 
    MyApp appState = ((MyApp)getApplicationContext()); 
    String state = appState.getState(); 
    ... 
    } 
} 
0

如何擴展您的類關於使用靜態關鍵字?

public static SomeClass someObject

在活動類

該啓動對對象

-1

1-在您的活性1,聲明陣列中公共靜態

public static ArrayList<HashMap<String, String>> myArray = new ArrayList<HashMap<String, String>>(); 

2-在你活性2活動3訪問您的ArrayList

Activity1.myArray 
相關問題