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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Rovio
0 / 0 / 0
Регистрация: 10.12.2013
Сообщений: 9
#1

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

10.01.2014, 01:01. Просмотров 1474. Ответов 14
Метки нет (Все метки)

Начинающий. В приложении есть 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};
список отображается корректно, с картинками.
Прошу опытных товарищей помочь найти ошибку!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2014, 01:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как получить int из массива .xml в коде? (Программирование Android):

Как получить файл XML от веб-сервиса - Программирование Android
Только начал изучать программирование в Android. Пытаюсь на андроид-клиенте получить от веб-сервиса 1с файл XML. Взаимодействие...

Как получить объект класса LinearLayout из файла .xml? - Программирование Android
Как вместо этого: LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); TextView...

<string> в XML возвращает INT в activity_main - Программирование Android
В XML recources/string строка: &lt;string name=&quot;URLsrc&quot;&gt;https://api.myjson.com/bins/2wgmq&lt;/string&gt; В activity_main строка: URL url =...

Dictionary<int, int> получить наибольшее значение value (втрого int) - C#
Dictionary&lt;int, int&gt; bet = new Dictionary&lt;int, int&gt;; bet.Add(1,20); bet.Add(2,50); int i = // сюда нужно записать большее значение...

Как получить путь до конкретного элмента ? | XML | DOM | Simple XML - PHP
Добрый день! Как Вы уже знаете, в Simple XML, чтобы получить доступ в XML файле к какому-либо элементу, нужно знать его путь....

Как отправить на сервер xml запрос с помощью post и получить ответ в xml? - PHP Сети
нужно отправить на сервер xml запрос с помощью post и получить ответ в xml, погуглил нашел примеры, осталось лишь проверить примеры на...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
verylazy
Заблокирован
10.01.2014, 11:46 #2
а если при первом варианте
int[] images = getResources().getIntArray(R.array.pictures);

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

Что означает int pos = 0; int value = 5; в данном коде? - C++
#include&lt;conio.h&gt; #include&lt;stdio.h&gt; #include&lt;math.h&gt; void mass(int y); void main() { int y;

Как представить int в двоичном коде - C++
Всем привет! У меня задание подсчитать сколько единиц в бинарном числе, соответствующем некому числу n (введенному десятичному)...там...

Как из int получить символ? - Java SE
доброго времени. подскажите, пожалуйста, как дополнить чтобы в строку s записывался символ. вот код while ((x.compareTo(sr)==1) ||...

Как получить int - вое значение с textbox - C#
Как получить int - вое значение с textbox...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.01.2014, 19:01
Ответ Создать тему
Опции темы

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