Java 通过活动修改静态HashMap

Java 通过活动修改静态HashMap,java,android,static,hashmap,static-members,Java,Android,Static,Hashmap,Static Members,为了在ActionBar中维护导航信息,我想使用下面的静态类在HashMap中存储这些信息(字符串+上下文): public class NavigationBarContainer { public static HashMap<String, Context> hashTest; } 公共类NavigationBarContainer{ 公共静态HashMap hashTest; } 但是当我通过3个活动添加一个引用这个常量类的值时,我只得到最后一个条目:在每个活动上

为了在ActionBar中维护导航信息,我想使用下面的静态类在HashMap中存储这些信息(字符串+上下文):

public class NavigationBarContainer {
    public static HashMap<String, Context> hashTest;
}
公共类NavigationBarContainer{
公共静态HashMap 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;
    }
}
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;
        }
    }
公共类HomeActivity扩展活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
HashMap ctxHash=新的HashMap();
NavigationBarContainer.hashTest=ctxHash;
put(“key1”,getApplicationContext());
NavigationBarContainer.hashTest=ctxHash;
}
}
我如何在其他两项活动中增加价值:

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;
    }
}
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;
        }
    }
公共类MyActivity扩展活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_one);
HashMap-ctxHash;
ctxHash=NavigationBarContainer.hashTest;
put(“key2”,getApplicationContext());
NavigationBarContainer.hashTest=ctxHash;
}
}
我尝试了一些不同的方法来访问数据,但我总是遇到同样的问题。。需要帮助吗

编辑:

这已经解决了,但实际上,我正在做一些更难的把戏。。我创建了一个超级类活动,它实现了ActionTab listener,每次我进入其他活动时,我都通过静态HashMap映射这个listener,但它不起作用。如果我不解决它,我会发另一个帖子


谢谢

您一直在使用相同的键添加元素。将比较关键点,如果在映射中找到相等的关键点,则要添加的元素将替换现有的元素

此外,您一直在重新创建地图:))

每次重新分配静态变量。相反,请使用以下命令:

HashMap<String, Context> ctxHash = NavigationBarContainer.hashTest;
ctxHash.put("key1", getApplicationContext());
并确保在使用变量之前,在静态类中将其更改为实例化哈希映射:

public static HashMap<String, Context> hashTest = new HashMap<String, Context>();
publicstatichashmap hashTest=newhashmap();