ссылочные строковые массивы в Android Strings.xml - PullRequest
7 голосов
/ 04 января 2012

Я бы хотел сослаться на строковый массив из другого строкового массива в strings.xml. Если я попытаюсь прочитать строковый массив (названный «заводы») в моей деятельности, значение каждого элемента будет нулевым.

Есть ли возможность получить эти значения?

Вот часть 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);
    }

Значения растений в каждом случае "нулевые"

Кто-нибудь знает, как получить доступ к значениям?

Ответы [ 3 ]

23 голосов
/ 04 января 2012

Прямой пример дан на: Android - String Resources

enter image description here

7 голосов
/ 04 января 2012

Вы должны сделать следующее:

  //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); 
2 голосов
/ 09 июля 2012
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_width="fill_parent"
    android:layout_height="fill_parent"
    >



</LinearLayout>

strings.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>
...