[英]Sharing an ArrayList Between Activities
我在跨活動的Application
類中存儲List
時遇到問題。
在“啟動畫面”中,我正在將數據從MySQL
數據庫加載到List
。
List
在名為Rateit
的類中,該類extends Application
。 我將其作為類變量進行處理:
public static List<String> masterCats;
在啟動畫面活動/類中,我這樣做:
在onCreate
:
Rateit.masterCats = new ArrayList<String>();
在加載數據的AsyncTask循環中,我這樣做:
Rateit.masterCats.add(cat);
cat
是來自數據庫的列表項。 我有Log.d
數據( cat
)以及ListPosition,以檢查是否將其添加到List
中。
但是,我需要在下一個Activity
獲取相同的信息,並將其放入adapter
。 返回長度為0。
我只是這樣做: adapter = new MasterCatAdapter(getActivity(), Rateit.masterCats, tf);
列表為什么不維護各個活動的數據? 這是因為它是static
嗎? 還有什么嗎
(注意:我將很快在這里添加getter和setter方法!)
正如@ A--C在他的評論中提到的,請避免使用具有靜態變量的模型。 相反,我會做這樣的事情:
private void yourMethodWhereYouGetYourData(){
//get your data
ArrayList<String> masterCats = new ArrayList<String>();
masterCats.add(cat);
//Assuming you're doing this synchronously, once you've gotten your data just do:
Intent i = new Intent(this, YourActivity.class);
i.putStringArrayListExtra("MasterCats", masterCats);
startActivity(i);
}
然后,在新Activity
的onCreate()
或任何地方,只需執行以下操作即可訪問列表:
getIntent().getStringArrayListExtra("MasterCats");
@KickingLettuce在評論中還提到,如果用戶離開Activity
則保持可訪問性。 因此,無論您要保存ArrayList的哪個Activity
,只需將其轉換為逗號分隔的String並將其保存在SharedPreferences中,如下所示:
private void saveCats(){
//get your ArrayList from wherever (either as a global variable or pass it into the
//method.
StringBuilder sb = new StringBuilder();
for(int i = 0; i < masterCats.size(); i++){
if(i == masterCats.size() - 1)
sb.append(masterCats.get(i));
else
sb.append(masterCats.get(i)+",");
}
SharedPreferences.Editor prefsEditor =
PreferenceManager.getDefaultSharedPreferences(this).edit();
prefsEditor.putString("MasterCats", sb.toString()).commit();
//Note: in API 11 and beyond you can store a Set of Strings in SharedPreferences, so
//if you are only targeting API 11+ you could do:
Set<String> masterCatsSet = new LinkedHashSet<String>(); //<--using LinkedHashSet to preserve order
masterCatsSet.addAll(masterCats);
prefsEditor.putStringSet("MasterCats",masterCatsSet).commit();
}
然后,在您的onCreate
訪問此SharedPreference,或者如果您希望在Activity
生命周期中保留該列表,則可以進行訪問。
將列表保存在Application擴展類中是個好主意,您可以通過以下方法實現
在您的App類中聲明清單如下
public static List<String> masterCats;
並聲明上述變量的setter和getter方法
public List getMasterCatsList()
{
return masteCats;
}
public Void setMasterCatsList(List list)
{
masteCats=list;
}
在Loader類中按以下方式獲取應用程序對象,如下所示
應用程序應用程序=(擴展應用程序類的YOurClassName)getApplication();
並設置列表如下
application.setMasterCatsList(List list);
現在您可以通過以下任何活動訪問此列表
Application application = (YOurClassName That Extends Application class) getApplication();
List l = application.getMasterCatsList();
希望對您有幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.