在 android strings.xml 中引用字符串数组

Posted

技术标签:

【中文标题】在 android strings.xml 中引用字符串数组【英文标题】:reference string-arrays in android strings.xml 【发布时间】:2012-02-02 09:36:58 【问题描述】:

我想从 strings.xml 中的另一个字符串数组中引用一个字符串数组。如果我尝试在我的活动中读取字符串数组(名为“植物”),则每个项目的值为 null。

是否有可能获得这些值?

这里是strings.xml的一部分:

<string name="Orlaya_grandiflora_1">Orlaya grandiflora</string>
<string name="Orlaya_grandiflora_2">Large-Flowered Orlaya</string>
<string name="Orlaya_grandiflora_3">Apiaceae</string>
<string-array name="Orlaya_grandiflora">
    <item>@string/Orlaya_grandiflora_1</item>
    <item>@string/Orlaya_grandiflora_2</item>
    <item>@string/Orlaya_grandiflora_3</item>
</string-array>
<string-array name="plants">
    <item>@array/Ginkgo_biloba</item>
    <item>@array/Capsicum_frutescens</item>
    <item>@array/Viscum_album</item>
    <item>@array/Orlaya_grandiflora</item>
</string-array>

我尝试访问这样的值,例如:

String[] plantArray = resources.getStringArray(R.array.plants);

for (String plant : plantArray) 
        System.out.println("--> " + plant);
    

植物的值在任何情况下都是“空”

有人知道如何访问这些值吗?

【问题讨论】:

什么是“资源”?对象还是其他? 缺少这个:Resources resources = getResources(); 【参考方案1】:

直接示例:android - String Resources

【讨论】:

这不适用于对字符串数组的引用,因为我写的是正面向上 为什么要将字符串数组放在字符串数组中?这甚至可能吗?对我来说,您似乎只能将字符串资源放在项目中而不是字符串数组中。 @eMich 我在哪里提到过将字符串数组放入字符串数组中? @eMich 是的,我认为您可能正确地将字符串资源放入项目中。 @Paresh Mayani 有你的任何例子....要了解更多关于字符串数组的信息,我已经越来越多地搜索 stack-over flow 我已经阅读了你的网站很多问题,如果你有任何示例链接,请发给我谢谢【参考方案2】:

您应该执行以下操作:

  //obtain the array that refrences others array
  TypedArray plantArray=getResources().obtainTypedArray(R.array.plants);
  //obtain the referenced arrays
  CharSequence[] ginkoArray=plantArray.getTextArray(0);
  //...
  CharSequence[] orlayaArray=plantArray.getTextArray(3); 

【讨论】:

谢谢,这正是我要找的!【参考方案3】:
public class Test extends ListActivity 
  String[] presidents;

  @Override
  public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    ListView lstView = getListView();
    // lstView.setChoiceMode(0); //CHOICE_MODE_NONE
    // lstView.setChoiceMode(1); //CHOICE_MODE_SINGLE
    lstView.setChoiceMode(2); // CHOICE_MODE_MULTIPLE
    lstView.setTextFilterEnabled(true);

    presidents = getResources().getStringArray(R.array.presidents_array);

    setListAdapter(new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_checked, presidents));
  

  public void onListItemClick(ListView parent, View v, int position, long id) 
    parent.setItemChecked(position, parent.isItemChecked(position));

    Toast.makeText(this, "You have selected " + presidents[position],
        Toast.LENGTH_SHORT).show();
  
;

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_
    android:layout_
    >



</LinearLayout>

字符串.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, MainActivity!</string>
    <string name="app_name">BasicViews5</string>
    <string-array name="presidents_array">
        <item>Dwight D. Eisenhower</item>
        <item>John F. Kennedy</item>
        <item>Lyndon B. Johnson</item>
        <item>Richard Nixon</item>
        <item>Gerald Ford</item>
        <item>Jimmy Carter</item>
        <item>Ronald Reagan</item>
        <item>George H. W. Bush</item>
        <item>Bill Clinton</item>
        <item>George W. Bush</item>
        <item>Barack Obama</item>
    </string-array>
</resources>

【讨论】:

以上是关于在 android strings.xml 中引用字符串数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 strings.xml 中引用其他字符串? [复制]

在android开发中,关于string和string.xml的问题

为啥源码中的strings.xml中有msgid属性

Android 基本语法

从strings.xml 中的另一个字符串引用一个字符串?

Android - 我啥时候应该在 Strings.xml 资源文件中转义 unicode?