【发布时间】:2015-05-16 11:49:26
【问题描述】:
我有一个充满自定义对象的 ArrayList。我需要将此 ArrayList 保存到一个 Bundle 中,然后再检索它。
Serializable 和 Parcelable 都失败了,我现在只是尝试以某种方式保存与 ArrayList 中的索引关联的对象,然后在恢复 Bundle 并重新添加对象时检查这些对象。
我所拥有的是这样的:
保存捆绑包时:
//Create temporary array of the same length as my ArrayList
String [] tempStringArray = new String[myList.size()];
//Convert the enum to a string and save it in the temporary array
for (int i = 0; i<myList.size();i++){
tempStringArray [i] = myList.get(i).getType(); //returns the enum in string form
}
//Write this to the Bundle
bundle.putStringArray("List", tempStringArray);
所以我现在有一个字符串数组,表示最初在 ArrayList 中的对象的枚举类型。
所以,当恢复 Bundle 时,我正在尝试的是这样的:
//Temporary string array
String[] tempStringArray = savedState.getStringArray("List");
//Temporary enum array
ObjectType[] tempEnumArray = new ObjectType[tempStringArray.length];
for (int i = 0; i<tempStringArray.length;i++){
tempEnumArray[i]=ObjectType.valueOf(tempEnemies[i]);
}
所以,现在我有了最初在 ArrayList 中的每个项目的枚举类型。
我现在正在尝试做的事情类似于(将进入上面的 for 循环):
myList.add(tempEnumArray[i].ObjectTypeThisEnumRefersTo());
显然,上面的“ObjectTypeThisEnumRefersTo()”方法不存在,但这最终是我想要找出的。这是可能的还是有其他方法可以做到这一点?
【问题讨论】:
-
您是在谈论 Java 枚举,还是更广泛意义上的“枚举”? myList 最初持有什么样的对象?
-
嗨@JHH,我在这里询问Java 枚举。原始数组列表包含自定义对象(在我的情况下,它们是“敌人”类型的对象,因为这是一个游戏)希望这会有所帮助。
-
所以,如果我有误解,请原谅我,myList 是否保存一个名为 Enemy 的单个枚举的不同值?你想从字符串重新创建枚举 values 吗?因为一开始我以为你有不同类的对象,需要确定类。如果您需要它们各自字符串中的值,Enemy.valueOf(String) 是您的朋友。
-
不@JHH,列表中的所有对象都是'Enemy'类的实例 - 所以我会这样做:bee = new Enemy(EnemyType.Bee);然后 spider = new Enemy(EnemyType.spider);因此,我需要添加保存 Bundle 时的项目 - 所以 myList.add(bee)、myList.add(spider)。但显然必须按照原来的顺序返回。希望这是有道理的!
标签: java android enums bundle value-of