我们如何从java文件动态添加数组到android中的现有xml文件?

时间:2013-05-13 12:51:41

标签: java android xml resources preferences

我们正在尝试将java文件中的数组动态添加到xml文件中。

我们有一个ArrayList catList,它通过从网站读取xml文件来填充。 ArrayList的填充方式如下:[item1,item2,item3,item4,item5]。

的preferences.xml

<?xml version="1.0" encoding="utf-8"?>

<ListPreference
    android:title="Ondernemer selecteren"
    android:summary="Bij deze optie kunt U kiezen van welke ondernemer U de agenda wilt zien."
    android:key="listPref"
    android:defaultValue="Standaard"
    android:entries="@array/ondernemerArray"
    android:entryValues="@array/ondernemerValues"
/>

</PreferenceScreen>

arrays.xml

<?xml version="1.0" encoding="utf-8"?>

<resources>    
 <string-array name="ondernemerArray">
    <item></item>
</string-array>

 <string-array name="ondernemerValues">
    <item></item>
</string-array>

有谁知道我们如何将catList数组动态地放入xml文件中,在元素之间动态增加元素数量?

2 个答案:

答案 0 :(得分:1)

要使用动态值填充首选项列表,请在settings.xml中创建首选项,但不要指定其android:entries和android:entryValues属性。

<ListPreference 
    android:title="@string/pref_title"
    android:summary="@string/pref_summary"
    android:key="prefkey"
    android:defaultValue="" />

然后在您的首选项活动onCreate中添加一些代码,以填充xml数据中的条目和entryValues。

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);

    initializePreferenceList();

    ...
}

protected void initializePreferenceList(){

    ListPreference lpPref = (ListPreference)findPreference("prefkey");

    // Read your xml data somehow
    ...

    // Write some methods to fill a String array from your xml data:
    // something like toEntriesArray, toEntryValuesArray
    String[] entries = toEntriesArray(xmlData);
    String[] entryValues = toEntryValuesArray(xmlData);

    lpPref.setEntries(entries);
    lpPref.setEntryValues(entryValues);
}

您无需在array.xml中为此首选项定义任何值。

答案 1 :(得分:0)

正如我的评论中所述,resources在编译后无法更改。因此,如果您有需要在运行时更新的内容(例如此处为Array),则需要使用可用的persistent storage options几种形式之一。使用哪一个取决于您的数据和您的需求。如果你不需要它是持久的那么你可以使用static array,但这听起来不像你需要的那样。

resources主要帮助避免混乱你的java代码,并不是动态的,而是为了让开发人员更容易为存储和引用预编译的东西。我知道这不是你正在寻找的答案,但希望这可以帮助澄清resources的一些问题。

如果有人想要添加更好或更准确的说明,请随时编辑