0

私は次のリストを持っています:

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

アプリの負荷に関するデータが入力されています。ほとんどのアクティビティとフラグメントで、データの読み取りと変更の両方を行いながら、アプリ全体で使用する必要があります。

あまり複雑にすることなく、これをグローバルにするための最良かつ最も簡単な方法は何ですか?

注:スタックオーバーフローについて説明するには多すぎる理由から、これはリストとして使用され、プロパティを持つカスタムオブジェクトとしては使用されません。

4

5 に答える 5

3

データを保持するクラスを作成し(Singletonメソッドと同様)、変数を静的にします。

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;
    }
}
于 2012-07-25T19:47:44.780 に答える
3

他の投稿には要点がありません。もちろん、彼はリストをインスタンス メンバーとして保存し、ゲッターとセッターでアクセスできますが、どのオブジェクトがメンバーを所有しているのでしょうか?

提案されているように静的を使用できますが、より良い方法があります...アプリケーションクラスからぶら下げるだけです。を拡張するクラスを作成し、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 されます。

于 2012-07-25T20:05:03.190 に答える
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.
    }

}

クラスを抽象化すると、誰かがそれをインスタンス化するのを防ぐことができます。アプリケーションを最初に実行するときにリストに要素が必要な場合は、上記のように静的初期化ブロックでこれを行うことができます。

于 2012-07-25T19:46:30.990 に答える
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;
}
于 2012-07-25T19:48:39.023 に答える
0

これを実現するための推奨される方法は、ゲッターとセッターを使用することです。リスト自体を非公開にし、公開の getList および publi setList メソッドを作成して、アプリのどこからでもリストを取得および設定します。

public List getList() {
    return items;
}

public void addItems(String item) {
    //code to add items
}
于 2012-07-25T19:52:44.007 に答える