1

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

问题:在我的三星 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();

}

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

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

提前问候和感谢,蒂莫

4

3 回答 3

1

不要这样做...

SettingsActivity.hatCommandList.remove(position);

最重要的是,不要public在 an 中创建对象或方法Activity并尝试从任何其他 Android 应用程序组件中使用它们 - anActivity是一个具有生命周期的特例类,不应将其视为“普通”Java 类。

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

于 2012-11-23T00:02:06.003 回答
0

同步您的列表:如何创建同步的数组列表

可能你遇到了比赛条件。

于 2012-11-22T20:55:12.997 回答
0

好的,我发现了问题:

当第一个活动开始时,它会从文件中读取数据到该列表中。这发生在 onCreate 函数中。

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

但是在带有 4.1 的 SGSIII 上,再次使用了 onCreate 方法,即使它实际上只是恢复。目前我不知道为什么,但我想这是一个可以解决的问题。

也许你可以给我一些提示,为什么 android sdk 的开发人员确实改变了,我该如何阻止它。

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

于 2012-11-23T20:54:09.983 回答