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

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

Войти
Регистрация
Восстановить пароль
 
Tsegorah
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 89
#1

Как при построении Listview выибрать картинку в зависимости от значения в БД? - Программирование Android

01.05.2016, 18:05. Просмотров 252. Ответов 10
Метки нет (Все метки)

Я использую SimpleCursorAdapter. У меня в БД примерно 1к строк. Я хочу хранить в поле таблицы не всю картинку целиком, а только значение, в зависимости от которого будет выбираться одна из 3х картинок.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2016, 18:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как при построении Listview выибрать картинку в зависимости от значения в БД? (Программирование Android):

Выводить картинку из в зависимости от значения переменной - JavaScript
задача такая есть переменная которая принимает три значения 0,100,200 задача если 0 то ничего не происходит если 100 показать картинку...

Показывать ту или иную картинку в зависимости от значения переменной - C#
Есть две картинки male и female. И собственно команда friend.Sex c двумя полами male и female Как сделать так,что бы вместо текста...

ListView , как добавить картинку в SubItems - Visual Basic .NET
такой код: Dim item1 As New ListViewItem(name, 0) item1.SubItems.Add("1") '- вот как в этот SubItems вместо...

Как вывести картинку в зависимости от условия - Matlab
Есть алгоритм, который в зависимости от условия принимает решение. Нужно, чтобы после выполнения условия выводилась картинка. Условий 11 и...

ListView.Items. Как воткнуть картинку в произвольный SubItem? - C#
Изображеня из SmallImageList вставляются только в нулевой колонке. Можно ли как-то сделать то же для остальных сабитемов?

Как воспользоваться полярным графиком при построении годографов при наличии комплексных чисел - MathCAD
Здравствуйте подскажите пожалуйста можно ли воспользоваться полярным графиком при построении различных годографов и как это правильно...

10
Alexvp
108 / 72 / 8
Регистрация: 03.08.2014
Сообщений: 348
01.05.2016, 18:13 #2
В чем проблема? Храните в таблице некие условные значения и по ним выбирайте загрузку нужной картинки из ресурсов, например. Скажем, если в поле таблицы "0", то это картинка №1, если "1", то картинка №2, если "15", то снова картинка №2 и т.д.
0
Tsegorah
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 89
01.05.2016, 21:26  [ТС] #3
Я понимаю это, но не понимаю, как это сделать. Я думал, что надо перегрузить метод адаптера setViewImage(ImageView v, String value), сделать как-то так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    @Override
    public void setViewImage(ImageView v, String value) {
        String uri;
        Log.e("log", "====================== setViewImage");
        switch (this.getCursor().getInt(4)) {
            case 0:
                Log.e("log", "======================            0");
                uri = Integer.toString(R.drawable.neload_icon);
                break;
            case 2:
                Log.e("log", "======================            2");
                uri = Integer.toString(R.drawable.delete_icon);
                break;
            default:
                Log.e("log", "======================            default");
                uri = Integer.toString(R.drawable.reload_icon);
        }
        super.setViewImage(v, uri);
    }
А этот метод при построении списка даже не вызывается. И у меня есть подозрение, что и uri я неправильно нахожу.
0
Alexvp
108 / 72 / 8
Регистрация: 03.08.2014
Сообщений: 348
01.05.2016, 21:35 #4
uri это не совсем строка. Непонятно, зачем вам uri для получения картинки из ресурсов?
0
Tsegorah
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 89
02.05.2016, 18:00  [ТС] #5
Потому что строка требуется методу setViewImage.

Добавлено через 19 часов 34 минуты
Главный вопрос не в строке, а в том, какой метод перегружать, чтобы картинка нужная выбиралась.
0
goodi_tomsk
4 / 1 / 0
Регистрация: 12.05.2015
Сообщений: 84
02.05.2016, 22:28 #6
Tsegorah, а если например сделать столбец со значениями 1,2,3. И делать проверку, если ==1 то показываем картинку №1... ?
инт в строку перевести и вперед.
0
Tsegorah
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 89
02.05.2016, 22:41  [ТС] #7
А где делать проверку и выбирать картинку? В каком методе?
0
Frozik6k
12 / 12 / 7
Регистрация: 04.04.2016
Сообщений: 51
03.05.2016, 00:02 #8
вот реализация из моей программы
Java
1
2
3
4
5
6
7
8
9
10
    @Override
    public void setViewImage(ImageView v, String value) {
        if (Integer.parseInt(value) == DB.AS_THING){
            v.setImageResource(R.drawable.thing);
        } else {
            v.setImageResource(R.drawable.box);
        }
        //super.setViewImage(v, value);
 
    }
0
Tsegorah
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 89
03.05.2016, 10:39  [ТС] #9
Цитата Сообщение от Frozik6k Посмотреть сообщение
вот реализация из моей программы
У меня не срабатывает метод setViewImage.
0
Frozik6k
12 / 12 / 7
Регистрация: 04.04.2016
Сообщений: 51
03.05.2016, 21:46 #10
Я на основе класса SimpleCursorAdapter, создал свой класс ThingSimpleCursorAdapter, в котором и переопределил метод setViewImage. Вот как выглядит код в основной активити
Java
1
2
3
4
5
6
 // Формируем столбцы сопоставления
        String[] from = new String[] { DB.COLUMN_ISBOX, DB.COLUMN_THING_NAME};
        int[] to = new int[] { R.id.ivIcon, R.id.tvNameThing};
 
        // создаем адаптер и настраиваем список
        mScAdapter = new ThingSimpleCursorAdapter(this, R.layout.item, null, from, to, 0);
R.id.ivIcon - это компонент imageView. DB.COLUMN_ISBOX - это колонка типа int, значения в которой 0 или 1. Все прекрасно работает. Раз у вас не работает, значит надо больше вашего кода показать, чтобы можно понять причину.
0
Tsegorah
1 / 1 / 0
Регистрация: 02.03.2014
Сообщений: 89
04.05.2016, 01:30  [ТС] #11
Я решил проблему, используя класс
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
class MyViewBinder implements SimpleCursorAdapter.ViewBinder {
        @Override
        public boolean setViewValue(View v, Cursor cursor, int columnIndex) {
            Log.e("log", "====================== setViewValue started");
 
            if (v.getId() == R.id.imageView && columnIndex == 4) {//v instanceof ImageView) {
                Log.e("log", "====================== instance of imageView");
                switch (cursor.getInt(4)) {
                    case 0:
                        Log.e("log", "======================            0");
                        ((ImageView) v).setImageResource(R.drawable.neload_icon);
                        break;
                    case 2:
                        Log.e("log", "======================            2");
                        ((ImageView) v).setImageResource(R.drawable.delete_icon);
                        break;
                    default:
                        Log.e("log", "======================            default");
                        ((ImageView) v).setImageResource(R.drawable.reload_icon);
                }
                return true;
            }
            else {
                Log.e("log", "====================== other instance");
                return false;
            }
        }
    }
И конструктор адаптера
Java
1
2
3
4
5
6
    public MySimpleCursorAdapter(Context context, int layout, Cursor c, String[] from,int[] to, int flags, MyDB mdb) {
        super(context, layout, c, from, to, flags);
        db = mdb;
        MyViewBinder mvb = new MyViewBinder();
        this.setViewBinder(mvb);
    }
И после изменения базы данных, для смены картинки
Java
1
2
                cursor = db.getAllData(db_table);
                scAdapter.changeCursor(cursor);
1
04.05.2016, 01:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2016, 01:30
Привет! Вот еще темы с ответами:

Ошибка при выводе значения массива в listview - C#
Вопросик появился. Вот в классе я матрицы сложу, но значение нужно вывести в форме, пробовал выводить в ListView3 ( в первых двух ListView...

Как показать ProgressDialog при долгом построении UI? - Программирование Android
Есть две активити. При нажатии кнопки в первой активити, происходит переход ко второй. Во второй активити в onCreate строится интерфейс. ...

Обновление столбца listview при выборе значения в combobox - C#
Подскажите, пожалуйста, как сделать? чтобы при выборе соответствующего значения в combobox обновлялся столбец в listview

Сохранить измененные значения EditText в ListView при прокрутке - Программирование Android
Добрый день, прошу помощи, т.к. уже долго и безрезультатно пытаюсь решить следующую задачу: Есть Листвью с названиями товаров ,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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