4

我正在做一些 Android 编码,我经常做的事情是创建包含我的静态列表项的 plist。当我必须执行多层列表视图时,这非常有帮助,用户可以向下钻取以查找信息。(例如 Continent --> Country --> City )然后我要做的是编写一个列表视图,将其自身的副本推入更深的数据树中。

但是,在 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 上的 a NSArrayof等价物?NSDictionaries

(我发现了android plist parser,但我想知道它是如何在 Android 上完成的)

4

1 回答 1

0

好吧,我会试一试。我目前正在从 Android 到 iOS(与您完全相反),所以我了解您正在尝试做什么(我认为)。Java 没有“字典”,但它确实有 HashMaps(键/值配对——同样的事情)。如果你真的想要,你可以使用序列化将你的对象保存到一个文件中,你可以将它打包到 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.xml 中。然后,您可以在应用程序启动时使用 XMLPullParser 对其进行解析,并在应用程序运行期间将其存储在内存中,但您将无法使用“@layout、@string”等。

于 2012-08-02T00:20:15.527 回答