活动之间的全局对象

时间:2012-11-22 20:47:04

标签: java android global-variables

目前我正在开发一个Android应用程序,但我遇到了一个我无法解决的问题。我有2个活动。在其中一个中,我将ArrayList定义为public static。此列表用作列表视图的内容。在其他活动中,我想编辑该特定列表的项目,或者更确切地删除它们。

问题: 在我的三星Galaxy S II上工作正常(Android版本4.0.4),但在其他设备上,如SGSIII(我认为4.1),同步该列表存在问题。所以基本上如果第二个活动结束并返回到第一个活动,所有的变化似乎都没有了......

这是第一个活动中listview的更新功能的代码;此方法无法识别更改:

private void updateList() { 

    String[] values = new String[hatCommandList.size()];

    for(int i = 0; i < values.length;i++) {             

        values[i] = ((Command)hatCommandList.get(i)).getRealCommand();

    }           
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values);     
    ListViewSentCommands.setAdapter(adapter);       
}
你可以看到,没什么特别的。这里是我编辑“hatCommandList”的第二个活动的代码:

public void onClick(View v) {               
    SettingsActivity.hatCommandList.remove(position);                       
    finish();

}

“position”,用于指向列表中的某个位置,显然包含正确的值,我已经检查过了。

无论如何,我希望你能告诉我为什么它在某些设备上工作以及它为什么不在某些设备上...

提前问候和感谢, 蒂莫

3 个答案:

答案 0 :(得分:1)

不要这样做......

SettingsActivity.hatCommandList.remove(position);

最重要的是,不要在public中创建Activity个对象或方法,并尝试在任何其他Android应用程序组件中使用它们 - Activity是一个特殊的案例类,它有生命-cycle,不应该被视为'普通'Java类。

如果您想以这种方式共享数据,那么我建议您创建一个POJO帮助程序类并在那里保存ArrayList。然后,第二个Activity可以进行更改,并在第一个Activity恢复时,让它检查数据更改并刷新适配器。

答案 1 :(得分:0)

同步您的列表:how to create Synchronized arraylist

可能是你遇到了竞争状态。

答案 2 :(得分:0)

好的,我发现了问题:

当第一个活动开始时,它会将文件中的数据读入该列表。在onCreate函数中发生。

现在的问题是,在我的带有android 4.0.4的SGSII设备上,当我完成第二个没有问题的时候,重点恢复到第一个活动。

但是在SGSIII 4.1中,onCreate方法再次使用,即使它实际上只是恢复。目前我不明白为什么,但这是一个可以解决的问题,我猜。

也许你可以给我一些提示,为什么android sdk的开发者确实改变了,我怎么能阻止它。

PS:我正在调用startActivityForResult方法来启动2.活动以及onActivityResult函数。