0

Listアクティビティ間でApplicationクラスに を格納する際に問題があります。

スプラッシュ画面でList、データベースからデータをロードしていMySQLます。

はthatListというクラスにあります。私はクラス変数としてこれを行います:Rateitextends 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 メソッドをすぐにここに追加します!)

4

2 に答える 2

2

@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);
}

次に、 newActivityonCreate()またはどこでも、次のようにしてリストにアクセスします。

getIntent().getStringArrayListExtra("MasterCats");

@KickingLettuce は、ユーザーがActivity. したがって、ActivityArrayList を保存する場合は、コンマ区切りの文字列に変換し、次のように 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ます。

于 2013-03-04T22:05:24.027 に答える
1

List を Application 拡張クラスに保存することは、次の方法で実現できることをお勧めします

次のように App クラスで List を宣言します

public static List<String> masterCats;

上記の変数のsetterメソッドとgetterメソッドを宣言します

public List getMasterCatsList()
 {
    return masteCats;
 }

public Void setMasterCatsList(List list)
 {
    masteCats=list;
 }

次のように Loader クラスで次のようにアプリケーション オブジェクトを取得します。

アプリケーション application = (アプリケーション クラスを拡張するあなたのクラス名) getApplication();

リストを次のように設定します

  application.setMasterCatsList(List list); 

次のように、任意のアクティビティからこのリストにアクセスできるようになりました

  Application application = (YOurClassName That Extends Application class) getApplication();

 List l = application.getMasterCatsList();

それがあなたに役立つことを願っています

于 2013-03-05T09:42:30.313 に答える