2012-07-25 14 views
0

我有以下列表:在整個Android Java項目中,我的List被讀取和修改的正確方法是什麼?

List<Map<String, String>> items = new ArrayList<Map<String, String>>(); 

它填充了我的應用程序的加載數據。我需要在整個應用程序,大多數活動和片段中使用它,同時讀取和修改數據。

是什麼力量讓沒有太多的複雜性這一全球最好和最簡單的方法是什麼?

注:對於那些過多的堆棧溢出解釋原因,這多少可以使用的名單,而不是帶有屬性的自定義對象。

回答

3

其他帖子都沒有提及。當然,他可以將列表存儲爲實例成員,並通過getter和setter訪問它,但是對象擁有哪些成員?

你可以使用靜態作爲已經建議,但有一個更好的辦法...只是掛了你的應用程序類的。現在創建一個擴展Application類,並添加實例有,

public class MyApplication extends Application { 
    private List<Map<String, String>> items = new ArrayList<Map<String, String>>(); 

    public List<Map<String, String>> getItems() { 
     return items; 
    } 

    public void setItems(List<Map<String, String>> items) { 
     this.items = items; 
    } 
} 

配置應用程序類到您的清單,

<application 
    android:name=".MyApplication" 
    ... 

,你們的活動或服務,只要做到這一點,

List<Map<String, String>> items = ((MyApplication)getApplication()).getItems(); 

從你的片段,爲此,

List<Map<String, String>> items = ((MyApplication)getActivity().getApplication()).getItems(); 

好的是,這個對象和你的應用程序有相同的生命週期。它存在於您的應用程序的任何部分處於活動狀態,並且隨應用程序一起GC'd。

+0

我喜歡這樣,tbh我不是一個機器人,所以這可能不是我會想到的。 – 2012-07-25 20:10:11

+0

如果我想要兩個全局列表...例如項目A和項目B,該怎麼辦? – 2012-07-25 20:13:43

+0

只需添加另一個名爲'itemsA'的實例成員,並添加一個相應的getter'getItemsA()'和setter'setItemsA()'。 – 2012-07-25 20:42:06

0

創建一個抽象的輔助類,並堅持在那裏,你的列表,你喜歡這樣,你可以從任何地方訪問它。

public abstract class HelperClass() { 

    public static List<Map<String, String>> items 
           = new ArrayList<Map<String,String>>(); 

    static { 
     //populate the list with anything you need when the class is loaded. 
    } 

} 

使您的類抽象將阻止某人實例化它。如果在應用程序首次運行時需要列表中的任何元素,則可以在靜態初始化塊中執行此操作,如上所示。

3

我會做一個類來保存數據(類似於辛格爾頓方法),使靜態變量。

class NewClass { 

    public static List<Map<String, String>> items = new ArrayList<Map<String,String>>(); 

} 

您可以根據需要將getter/setter/modifier方法添加到上述類中。

然後在你的其他類,你可以創建你可以定義爲從其他類列表局部變量。

class OldClass { 
    private List<Map<String, String>> myItems; 

    public OldClass() { 
     myItems = NewClass.items; 
    } 
} 
0

這將允許你訪問它到你的應用程序的任何地方。

private List<Map<String, String>> items = new ArrayList<Map<String, String>>(); 


public List<Map<String, String>> getItems() { 
    return items; 
} 



public void setItems(List<Map<String, String>> items) { 
    this.items = items; 
} 
0

完成此操作的首選方法是使用getter和setter。將列表本身設爲私有,並創建一個公共的getList和publi setList方法,以便從應用程序的任何位置獲取和設置列表。

public List getList() { 
    return items; 
} 

public void addItems(String item) { 
    //code to add items 
} 
相關問題