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

How do we dynamically add an array from a java file to an existing xml file in android?

我们试图动态地将Java文件中的数组添加到XML文件中。

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

XML优先

1
2
3
4
5
6
7
8
9
10
11
12
<?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>

数组文件

1
2
3
4
5
6
7
8
9
10
<?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文件,并动态地增加元素的数量吗?


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

1
2
3
4
5
<ListPreference
    android:title="@string/pref_title"
    android:summary="@string/pref_summary"
    android:key="prefkey"
    android:defaultValue="" />

然后,在Preferences活动中添加一些代码,一旦创建,就可以从XML数据中填充条目和entryValues。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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中定义任何值。


正如我在评论中所说,resources在编译后不能更改。因此,当您有需要在运行时更新的内容时,例如这里的Array,您将需要使用可用的几种形式的持久存储选项之一。使用哪一个取决于您的数据和需求。如果你不需要它的持久性,那么你可以使用一个static array,但听起来这不是你需要的。

EDCOX1的0个方面主要有助于保持您的Java代码,并不是动态的,而是让开发人员在存储和引用预先编译的东西的地方更容易。我知道这不是你想要的答案,但希望这能帮助你澄清一些关于resources的事情。

如果有人有更好或更准确的描述要添加,请随意编辑