簡體   English   中英

在活動之間共享ArrayList

[英]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);
}

然后,在新ActivityonCreate()或任何地方,只需執行以下操作即可訪問列表:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM