我正转向做一些 Android 编码,我经常做的事情是创建包含我的静态列表项的 plist。当我必须执行多层 ListView 时,这非常有用,用户可以在其中向下钻取以查找信息。 (例如 Continent --> Country --> City)然后我所做的是编写一个 ListView ,将其自身的副本更深地钻入数据树。
但是,在 Android 上,我似乎找不到任何类型的 plist 可以让我执行上述操作(无需创建 SQL 数据库)。
所以我最终所做的是对所有内容进行硬编码……这不是我想要做的。 Android 有大量可用的 xml 资源,我觉得我应该遵循这种模式。
ArrayList<Bundle> data = new ArrayList<Bundle>();
Bundle infoHeader = new Bundle();
infoHeader.putInt(keyText,R.string.stay_informed);
infoHeader.putInt(keyLayout,R.layout.main_header);
data.add(infoHeader);
Bundle readAction = new Bundle();
readAction.putInt(keyText,R.string.read);
readAction.putInt(keySubtext, R.string.read_substr);
readAction.putInt(keyLayout, R.layout.main_row_blue);
// link to new ArrayList of items for the next level down
data.add(readAction);
我想做的是以下(或非常相似的事情):
<resources>
<array name="main_list">
<extra>
<string name="keyText" value="@string/stay_informed" />
<layout name="keyLayout" value="@layout/main_header" />
</extra>
<extra>
<string name="keyText" value="@string/read" />
<string name="keySubtext" value="@string/read_substr" />
<layout name="keyLayout" value="@layout/main_row_blue" />
<!-- <string name="keyLink" value="@array/detail_list" /> Where detail_list has more Bundles -->
</extra>
</array>
</resource>
只需在运行时加载 Bundle 数组,而不是将其硬编码到应用中。
所以。我如何有效地存储/检索 Android 上 NSDictionaries
的 NSArray
的等价物?
(我发现了 android plist parser ,但我想知道如何在 Android 上完成它)
最佳答案
好吧,我会试一试。我目前正在从 Android 转向 iOS(与您完全相反),所以我了解您正在尝试做什么(我认为)。 Java 没有“字典”,但它确实有 HashMap(键/值配对 - 同样的事情)。如果你真的想要,你可以使用序列化将你的对象保存到一个文件中,你可以将这个文件打包到 Android 的 Assets 文件夹中。然后您可以随时阅读(但不能写入)此信息。
这是一个帮助您序列化 Java 对象的链接。在 Java 中搜索 HashMaps,您会看到很多东西。如果你打算在这个 HashMap 中放置许多不同类型的对象,请不要使用泛型。 (它们看起来像这样 <String, String>
)。留下那些来制作一个原始的 HashMap。
序列化:(当你坚持它时) http://www.javadb.com/writing-objects-to-file-with-objectoutputstream
反序列化:(当你读回它时) http://www.exampledepot.com/egs/java.io/DeserializeObj.html
另一种可能更简单的方法是只创建一个 XML 文件(就像您在上面所做的那样)并将其存储在 Assets 中。然后,您可以在应用启动时使用 XMLPullParser 对其进行解析,并在应用运行期间将其存储在内存中,但您将无法使用“@layout、@string”等。
关于java - 在 Android 上向/从文件加载 Bundle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11767874/