【发布时间】:2016-08-21 09:22:24
【问题描述】:
我正在从ArrayList<String> 中删除和添加某个值。删除该值不是问题,但是当我尝试再次添加它时,ArrayList 的旧内容成为位置 1 的新元素,而位置 0 是新元素,如果我想从中删除其他元素,则无法访问它们。这个是添加新值后的Log结果:
[blantyre, ["mzuzu","lilongwe","zomba"]]
但原来的样子是这样的:
[mzuzu, lilongwe, blantyre, zomba]
我尝试了以下方法:ArrayList.add(0,new String("blantyre") 和 ArrayList.add("blantyre") 但它们都将旧内容放在位置 1。
我使用以下语句从SharedPreferences 获取 ArrayList:
ArrayList<String> districts = AppController.getInstance().getPrefManager().getDistricts();
getDistricts 方法返回 ArrayList<String>。
在 SharedPreference 中,getDistricts 方法或多或少类似于:
return new ArrayList<String>() {{
//return the default districts, which is all of them
add(AppConst.KEY_MZUZU);
add(AppConst.KEY_LILONGWE);
add(AppConst.KEY_BLANTYRE);
add(AppConst.KEY_ZOMBA);
}};
所有AppConst.KEY_x 都是String 类型
【问题讨论】:
-
您确定原始的 ArrayList 不包含 ArrayList 元素吗?请显示更多代码。
-
能否提供更长的代码片段?
-
您确定您的
ArrayList不是ArrayList<ArrayList<String>>? -
我认为您将数组 (String[]) 与列表 (List
) 混合在一起。数组是不可变的,一旦初始化,您就无法扩展长度。列表是动态的,可以通过调用 add() 方法进行扩展。另一件事,你不应该使用 ArrayList.add() 而是使用 yourListObjectInstance.add()。 -
您需要发布所有相关代码。我没有看到获取原始列表、打印它、添加元素并再次打印它的代码。此外,创建一个匿名 ArrayList 子类只是为了返回一个包含 4 个元素的 ArrayList 是可怕的。只需创建一个空列表,然后添加 4 个项目。或使用
new ArrayList<>(Arrays.asList(1ppConst.KEY_MZUZU, AppConst.KEY_LILONGWE, ...))
标签: java arraylist sharedpreferences