2013-07-04 2 views
1

Фон: Для моего приложения Android я использую ListView, а элементы списка запускают звуки, которые хранятся в виде .ogg-файлов в каталоге/res/raw /. Я смог автоматически установить текстовые метки и длину списка с помощью строковых массивов, хранящихся в файле strings.xml, теперь мне нужен дополнительный массив идентификаторов, которые я хотел бы хранить там, а также для удобного расширения списка в будущем ,Как преобразовать этот массив java в xml?

Рабочий код: Для строковых массивов, я использую этот код: Java Фрагмент:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
... 
titles = getResources().getStringArray(R.array.listoftitles); 

XML (strings.xml):

<string-array name="listoftitles"> 
    <item>Title1</item> 
    <item>Title2</item> 
</string-array> 

Проблемный код: Java Фрагмент:

filenames = new int[]{R.raw.both1, R.raw.both2, R.raw.both3, R.raw.both4, R.raw.both5 
      , R.raw.both6, R.raw.both7, R.raw.both8, R.raw.both9, R.raw.both10, R.raw.both11 
      , R.raw.both12, R.raw.both13, R.raw.both14, R.raw.both15, R.raw.both16, R.raw.both17 
      , R.raw.both18, R.raw.both19}; 

Цель:

private void populatemylist() { 
    for (int i = 0; i < titles.length; i++) { 
     itemsdb.add(new Item(titles[i], descriptions[i], filenames[i])); 
    } 

} 

Удобство метода populatemylist() имеет решающее значение, и в то время как названия [] и описание [] легко извлекаются из XML-массивов, это не работает для имен файлов, которые мне нужны как RESID/междунар стоимость. Я попытался использовать целочисленный массив, а также общий массив с бэкэндом TypedArray Java, но это, похоже, нацелено на чертежи, и я просто не могу заставить его извлечь что-либо из папки/res/raw /. Я хотел бы иметь простое решение массива, который идет в strings.xml в моде

<item>R.raw.both1</item> 

и простой Java бэкэнде, который получает мне целочисленный массив из этих файлов.

ответ

1

Вам нужно использовать TypedArray, сообщите мне, если у вас возникнут проблемы в противном случае goodluck!

filenames.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
     <string-array name="random_imgs"> 
     <item>@raw/both1</item> 
     <item>@raw/both2</item> 
     <!-- ... --> 
    </string-array> 

</resources> 

private int getFileNameAtIndex(int index) { 
     TypedArray fileNames = getResources().obtainTypedArray(R.array.filenames); 
     // or set you ImageView's resource to the id 
     int id = fileNames.getResourceId(index, -1); //-1 is default if nothing is found (we don't care) 
     fileNames.recycle(); 
     return id; 
    } 
+1

Спасибо так много! Это именно то, что мне нужно. Все остальные вопросы и руководства по стекированию всегда использовали локальный int [] в Fragment и пытались передать весь массив. Это отлично работает, поскольку он получает только важную текущую ценность с помощью метода, а именно то, что отсутствовало во всех других нерабочих решениях. –

Смежные вопросы