Форум программистов, компьютерный форум CyberForum.ru

Как получить int из массива .xml в коде? - Android

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Rovio
0 / 0 / 0
Регистрация: 10.12.2013
Сообщений: 9
10.01.2014, 01:01     Как получить int из массива .xml в коде? #1
Начинающий. В приложении есть ListView. Кастомная разметка пункта списка представляет из себя два TextView, один под другим (заголовок и описание), и картинка ImageView сбоку.
Наполнять ListView предполагается из значений в массивах values/string.xml
XML
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
26
27
28
<?xml version="1.0" encoding="utf-8"?>
<resources>
 
    <string-array  name="names">
    <item>1_names</item>
    <item>2_names</item>
    <item>3_names</item>
    <item>4_names</item>
    <item>5_names</item>
    </string-array>
    
    <string-array  name="sub_names">
    <item>1_sub_names</item>
    <item>2_sub_names</item>
    <item>3_sub_names</item>
    <item>4_sub_names</item>
    <item>5_sub_names</item>
    </string-array>
 
    <array name="pictures">
    <item>@drawable/img_1</item>
    <item>@drawable/img_2</item>
    <item>@drawable/img_3</item>
    <item>@drawable/img_4</item>
    <item>@drawable/img_5</item>
    </array>
 
</resources>
Java
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class MainActivity extends Activity 
{
    
    @Override
    public void onCreate(Bundle savedInstanceState)        
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);                
   
        ListView myList = (ListView) findViewById(R.id.listView1); 
        String[] header = getResources().getStringArray(R.array.names);
        String[] description = getResources().getStringArray(R.array.sub_names);
        int[] images = getResources().getIntArray(R.array.pictures);
 
        // Упаковываем данные
        ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>(
                header.length);
        HashMap<String, Object> map;
        for (int i = 0; i < header.length; i++) {
            map = new HashMap<String, Object>();
            map.put("HDR", header[i]);
            map.put("DSCR", description[i]);
            map.put("IMG", images[i]);
            data.add(map);
        }
 
        // Массив имен атрибутов, из которых будут читаться данные
        String[] from = { "HDR", "DSCR", "IMG" };
 
        // Массив идентификаторов компонентов, в которые будем вставлять данные
        int[] to = { R.id.tv1, R.id.tv2, R.id.img };
 
        // создаем адаптер
        SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.my_item,
                from, to);
 
        // Устанавливаем адаптер для списка
        myList.setAdapter(adapter);
 
        
    }
}
При таком использовании картинки в списке не отображаются.

Если заменить
Java
1
int[] images = getResources().getIntArray(R.array.pictures);
на массив прямо в коде:
Java
1
int[] images = { R.drawable.img_1, R.drawable.img_2, R.drawable.img_3, R.drawable.img_4, R.drawable.img_5};
список отображается корректно, с картинками.
Прошу опытных товарищей помочь найти ошибку!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2014, 01:01     Как получить int из массива .xml в коде?
Посмотрите здесь:

Как использовать в запросе параметр типа int Android
Android Как конвертировать в int
Android Как отправить по bluetooth массив int?
Получить содержимое строки по содержанию переменной, но не из файла strings.xml Android
Android Как получить объект класса LinearLayout из файла .xml?
Android Не могу получить достук к объекту в другом xml
Сохранение массива int-ов Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
verylazy
Заблокирован
10.01.2014, 11:46     Как получить int из массива .xml в коде? #2
а если при первом варианте
int[] images = getResources().getIntArray(R.array.pictures);

сразу после этой строки вывести в консоль пару элементов этого массива и его размер что покажет?
Rovio
0 / 0 / 0
Регистрация: 10.12.2013
Сообщений: 9
10.01.2014, 13:54  [ТС]     Как получить int из массива .xml в коде? #3
Цитата Сообщение от verylazy Посмотреть сообщение
сразу после этой строки вывести в консоль пару элементов этого массива и его размер что покажет?
Эээ... Как бы... Неграмотный я! С консолью пока не разбирался, не терпелось сразу сделать что-то осязаемое. Вы уж подскажите, пожалуйста, что куда прописать. Чуть позже теории наберусь. Честное пионерское!
verylazy
Заблокирован
10.01.2014, 14:19     Как получить int из массива .xml в коде? #4
Java
1
2
3
int[] images = getResources().getIntArray(R.array.pictures);
System.out.println(images.lenght());
System.out.println(images[0]);
в этом окошке должно что-то вывести
Миниатюры
Как получить int из массива .xml в коде?  
Rovio
0 / 0 / 0
Регистрация: 10.12.2013
Сообщений: 9
10.01.2014, 14:50  [ТС]     Как получить int из массива .xml в коде? #5
Сделал как сказали. В левом маленьком окошке (all mesages) ничего не появилось. Все сообщения с правого большого окна в log.rar
Вложения
Тип файла: rar log.rar (10.3 Кб, 2 просмотров)
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 506
10.01.2014, 14:54     Как получить int из массива .xml в коде? #6
Вы забыли определить тип массива в ресурсе
XML
1
2
3
4
5
<integer-array name="years">
        <item>2009</item>
        <item>2010</item>
        <item>2011</item>
    </integer-array>
Rovio
0 / 0 / 0
Регистрация: 10.12.2013
Сообщений: 9
10.01.2014, 15:02  [ТС]     Как получить int из массива .xml в коде? #7
Писал я и <integer-array>, результат был тот-же.
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 506
10.01.2014, 15:05     Как получить int из массива .xml в коде? #8
Попробуйте вывести логи программы, а именно то что вы получаете в массиве
Вот вам урок http://startandroid.ru/ru/uroki/vse-...bschenija.html
Rovio
0 / 0 / 0
Регистрация: 10.12.2013
Сообщений: 9
10.01.2014, 15:37  [ТС]     Как получить int из массива .xml в коде? #9
С консолью пока не получается, но подставив в массив вместо значений типа @drawable/img_ значения типа 0x7f020002:
XML
1
2
3
4
5
6
7
    <integer-array name="pictures">
    <item>0x7f020002</item>
    <item>0x7f020003</item>
    <item>0x7f020004</item>
    <item>0x7f020005</item>
    <item>0x7f020006</item>
    </integer-array>
взятые из R.java:
Java
1
2
3
4
5
6
7
8
9
10
        public static final class drawable {
        public static final int bg=0x7f020000;
        public static final int ic_launcher=0x7f020001;
        public static final int img_1=0x7f020002;
        public static final int img_2=0x7f020003;
        public static final int img_3=0x7f020004;
        public static final int img_4=0x7f020005;
        public static final int img_5=0x7f020006;
        public static final int qw=0x7f020007;
    }
все прекрасно работает. Где собака зарыта?
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 506
10.01.2014, 16:01     Как получить int из массива .xml в коде? #10
Похоже синтаксис @drawable/img_5 не верен
Обратите внимание как прописывается присвоение id картинке в R.java
Попробуйте указать так R.drawable.img_5
Rovio
0 / 0 / 0
Регистрация: 10.12.2013
Сообщений: 9
10.01.2014, 16:10  [ТС]     Как получить int из массива .xml в коде? #11
Нет. Так не проходит. Выдает ошибку: "Error: String types not allowed (at '^index_0' with value 'R.drawable.img_5')."
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 506
10.01.2014, 16:24     Как получить int из массива .xml в коде? #12
Может тогда что-то типа этого android:id="@+id/button1"
@+id - команда компилятору добавить id если такого еще не существует..
verylazy
Заблокирован
10.01.2014, 16:35     Как получить int из массива .xml в коде? #13
http://stackoverflow.com/questions/5...f-resource-ids
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 506
10.01.2014, 17:06     Как получить int из массива .xml в коде? #14
Не так все просто как хотелось..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2014, 19:01     Как получить int из массива .xml в коде?
Еще ссылки по теме:

Android Как в Toast использовать переменную типа int
Как узнать наименование по номеру int в ресурсах R? Android
Как получить файл XML от веб-сервиса Android
<string> в XML возвращает INT в activity_main Android
Int и int[] в чем отличие? Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Rovio
0 / 0 / 0
Регистрация: 10.12.2013
Сообщений: 9
10.01.2014, 19:01  [ТС]     Как получить int из массива .xml в коде? #15
Победил! Спасибо verylazy за наводку. Спасибо всем принявшим участие!
Для интересующихся финальный вариант:
Кликните здесь для просмотра всего текста
Java
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class MainActivity extends Activity 
{
    Context context;
        
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);                      
   
        ListView myList = (ListView) findViewById(R.id.listView1); 
        String[] header = getResources().getStringArray(R.array.names);
        String[] description = getResources().getStringArray(R.array.sub_names);
    
        TypedArray ar = this.getResources().obtainTypedArray(R.array.pictures);
        int len = ar.length();
        int[] images = new int[len];
        for (int i = 0; i < len; i++)
            images[i] = ar.getResourceId(i, 0);
        ar.recycle();
    
        // Упаковываем данные
        ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>(
                header.length);
        HashMap<String, Object> map;
        for (int i = 0; i < header.length; i++) {
            map = new HashMap<String, Object>();
            map.put("HDR", header[i]);
            map.put("DSCR", description[i]);
            map.put("IMG", images[i]);
            data.add(map);
        }
 
        // Массив имен атрибутов, из которых будут читаться данные
        String[] from = { "HDR", "DSCR", "IMG" };
 
        // Массив идентификаторов компонентов, в которые будем вставлять данные
        int[] to = { R.id.tv1, R.id.tv2, R.id.img };
 
        // создаем адаптер
        SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.my_item,
                from, to);
 
        // Устанавливаем адаптер для списка
        myList.setAdapter(adapter);
 
        
    }
}
Yandex
Объявления
10.01.2014, 19:01     Как получить int из массива .xml в коде?
Ответ Создать тему
Опции темы

Текущее время: 23:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru