0

ActionBar でナビゲーション情報を維持するために、以下の Static クラスを使用して、これらの情報 (文字列 + コンテキスト) を HashMap に保存したいと考えています。

public class NavigationBarContainer {
    public static HashMap<String, Context> hashTest;
}

しかし、3 つのアクティビティを介してこの定数クラスを参照する値を追加すると、最後のエントリのみが取得されます。各アクティビティで、HashMap には最後のエントリ値があり、HasMap のサイズは常に 1 に等しくなります。

これは、最初のアクティビティにアクセスする方法です。

public class HomeActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

HashMap<String, Context> ctxHash = new HashMap<String, Context>();
        NavigationBarContainer.hashTest = ctxHash;
        ctxHash.put("key1", getApplicationContext());
        NavigationBarContainer.hashTest = ctxHash;
    }
}

他の2つのアクティビティに値を追加する方法:

public class Myctivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_one);

    HashMap<String, Context> ctxHash;
    ctxHash = NavigationBarContainer.hashTest;
    ctxHash.put("key2", getApplicationContext());
    NavigationBarContainer.hashTest = ctxHash;
        }
    }

別の方法でデータにアクセスするためのいくつかのトリックを試しましたが、常に同じ問題が発生します。助けが必要ですか?

編集 :

これは解決されましたが、実際には他のいくつかのより難しいトリックを行っています.. ActionTab リスナーを実装するスーパー クラス アクティビティを作成し、他のアクティビティに移動するたびに静的 HashMap を介してこのリスナーをマップしますが、機能しません。解決しなかったら別記事にします。

ありがとう

4

2 に答える 2

1
NavigationBarContainer.hashTest = ctxHash;

毎回静的変数を再割り当てします。代わりに、これを使用します。

HashMap<String, Context> ctxHash = NavigationBarContainer.hashTest;
ctxHash.put("key1", getApplicationContext());

あるいは単に:

NavigationBarContainer.hashTest.put("key1", getApplicationContext());

そして、変数が使用される前に、静的クラスでハッシュマップをインスタンス化するように変更してください。

public static HashMap<String, Context> hashTest = new HashMap<String, Context>();
于 2013-07-04T14:09:24.347 に答える