Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/22: Рейтинг темы: голосов - 22, средняя оценка - 4.82
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297

Как правильно построить адаптер для показа данных из базы в ListView

10.02.2014, 11:32. Показов 4720. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
На данный момент все данные в программе хранятся в классе, есть адаптер для отображения данных в ListView:
Java
1
2
ArtsAdapter adapter = new ArtsAdapter(this, 
                R.layout.listview_item_row, Data.data_list);
Соответственно данные для адаптера в классе Data:
Java
1
2
3
4
5
6
final static Arts data_list[] = new Arts[] {
                    new Arts(R.drawable.aa, "item0"),
                    new Arts(R.drawable.ab, "item1"),
                    new Arts(R.drawable.ac, "item2"),
                    new Arts(R.drawable.ad, "item3")
    };
На данный момент перевожу программу на SQLite, соответственно все данные будут в базе, подскажите как правильно построить адаптер для показа данных из базы, картинка при этом хранится в виде названия в базе данных.

Если можно - покажите пример кода или ссылку на подоюный проект.
Спасибо
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.02.2014, 11:32
Ответы с готовыми решениями:

Как правильно декодировать файл для показа в TextBox
Как правильно декодировать файл для показа в TextBox (фото прилогается + файл тоже) ?

Как правильно настроить фильтр для базы данных?
На Form1 установлены DBGrid1, DataSource1 и Sqlite3Dataset1, которые служат для визуализации данных. В DataModule1 установлены...

Подскажите как правильно сформулировать структуру базы данных для EF core
Всем привет! Делаю мобильное приложение. И тут захотел добавить систему комментариев. Суть вот в чём, есть некая статья, у неё есть...

21
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
10.02.2014, 11:54
Лучший ответ Сообщение было отмечено NOSC как решение

Решение

NOSC, используйте Cursor Adapter http://startandroid.ru/ru/urok... anija.html
1
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
10.02.2014, 15:28  [ТС]
Цитата Сообщение от KillAndEat Посмотреть сообщение
NOSC, используйте Cursor Adapter http://startandroid.ru/ru/urok... anija.html
Спасибо - то что надо.

Добавлено через 3 часа 27 минут
Есть вот такой момент
Java
1
2
String[] from = new String[] { DataBase.COLUMN_IMG, DataBase.COLUMN_TXT };
        int[] to = new int[] { R.id.imgIcon, R.id.txtTitle };
Картинки в каком виде должны быть в базе? у меня просто название картинки, пробовал ставить R.drawable.pic - то же не получается
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
10.02.2014, 15:40
Цитата Сообщение от NOSC Посмотреть сообщение
Картинки в каком виде должны быть в базе?
вы можете хранить ид картинки или же путь к ней в базе, а в getView в адаптере потом просто назначать их.
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
10.02.2014, 15:57
NOSC, в адаптере вызываете метод setImageResourse для ImageView

Добавлено через 8 минут
Но остерегайтесь OutOfMemory exception т.к. картинки едят много памяти. Советую почитать вот это http://developer.android.com/t... index.html

Или используйте для отображения картинок стороннюю библиотеку Universal image Loader, например. Для него есть русские доки.
0
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
10.02.2014, 20:50  [ТС]
Цитата Сообщение от KillAndEat Посмотреть сообщение
NOSC, в адаптере вызываете метод setImageResourse для ImageView

Добавлено через 8 минут
Но остерегайтесь OutOfMemory exception т.к. картинки едят много памяти. Советую почитать вот это http://developer.android.com/t... index.html

Или используйте для отображения картинок стороннюю библиотеку Universal image Loader, например. Для него есть русские доки.
Колеги, читал в интернете, смотрел, сам пробовал. Не доходит. Вот кусок кода:
Java
1
2
3
4
5
6
7
8
String[] from = new String[] { DataBase.COLUMN_IMG, DataBase.COLUMN_TXT, DataBase.COLUMN_PRE };
        int[] to = new int[] { R.id.imgIcon, R.id.txtTitle, R.id.pre };
        
        cursor = db.getArt();
        startManagingCursor(cursor);
        scAdapter = new SimpleCursorAdapter(this, R.layout.listview_item_row, cursor, from, to);
        // присваиваем адаптер списку
        lvMain.setAdapter(scAdapter);
В TextView все правильно в оба вставляется. А вот как быть с ImageView ???
Каким образом туда картинка "попадает"? Картинки хранятся в drawable ресурсах, в базе прописан просто идентификатор вида R.drawable.аа , пробовал картинки просто в assets положить и в базе прописать путь, но ошибка одна и та же на все картинки:
Кликните здесь для просмотра всего текста
02-10 22:41:39.653: E/BitmapFactory(2359): Unable to decode stream: java.io.FileNotFoundException: /drawable/aa.png: open failed: ENOENT (No such file or directory)
02-10 22:41:39.653: I/System.out(2359): resolveUri failed on bad bitmap uri: /drawable/aa.png
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
10.02.2014, 21:20
Почитайте про кастомные адапторы
0
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
11.02.2014, 11:20  [ТС]
Цитата Сообщение от NiRamz Посмотреть сообщение
Почитайте про кастомные адапторы
А чем этот плох? Так не должно работать?
Я подозвревал что должен возвращаться идентефикатор картинки из моего столбца "pic" в базе - но Появилась ругань (см выше), потом разместил картинки в assets и в ячейках базы указал путь к картинке - то же ругань.

Я вилимо просто не понимаю каким образом тут должно быть реализовано. Подскажите, если не трудно.
Спасибо

Добавлено через 1 час 40 минут
В общем прописал путь для файлов в assets и так же получил ошибки, но уже другого плана.
Кто-нибудь может подсказать где я не прав?

Кликните здесь для просмотра всего текста
02-11 11:01:13.937: W/ImageView(9802): Unable to open content: file:///android_asset/icons/aa.png
02-11 11:01:13.937: W/ImageView(9802): java.io.FileNotFoundException: /android_asset/icons/aa.png: open failed: ENOENT (No such file or directory)
02-11 11:01:13.937: W/ImageView(9802): at libcore.io.IoBridge.open(IoBridge.java:4 16)
02-11 11:01:13.937: W/ImageView(9802): at java.io.FileInputStream.<init>(FileInput Stream.java:78)
02-11 11:01:13.937: W/ImageView(9802): at java.io.FileInputStream.<init>(FileInput Stream.java:105)
02-11 11:01:13.937: W/ImageView(9802): at android.content.ContentResolver.openInpu tStream(ContentResolver.java:447)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.ImageView.resolveUri(Imag eView.java:636)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.ImageView.setImageURI(Ima geView.java:381)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.SimpleCursorAdapter.setVi ewImage(SimpleCursorAdapter.java:212)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.SimpleCursorAdapter.bindV iew(SimpleCursorAdapter.java:158)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.CursorAdapter.getView(Cur sorAdapter.java:250)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.AbsListView.obtainView(Ab sListView.java:2159)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.ListView.makeAndAddView(L istView.java:1831)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.ListView.fillDown(ListVie w.java:674)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.ListView.fillFromTop(List View.java:735)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.ListView.layoutChildren(L istView.java:1652)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.AbsListView.onLayout(AbsL istView.java:1994)
02-11 11:01:13.937: W/ImageView(9802): at android.view.View.layout(View.java:14008 )
02-11 11:01:13.937: W/ImageView(9802): at android.view.ViewGroup.layout(ViewGroup. java:4373)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.LinearLayout.setChildFram e(LinearLayout.java:1663)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.LinearLayout.layoutVertic al(LinearLayout.java:1521)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.LinearLayout.onLayout(Lin earLayout.java:1434)
02-11 11:01:13.937: W/ImageView(9802): at android.view.View.layout(View.java:14008 )
02-11 11:01:13.937: W/ImageView(9802): at android.view.ViewGroup.layout(ViewGroup. java:4373)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.FrameLayout.onLayout(Fram eLayout.java:448)
02-11 11:01:13.937: W/ImageView(9802): at android.view.View.layout(View.java:14008 )
02-11 11:01:13.937: W/ImageView(9802): at android.view.ViewGroup.layout(ViewGroup. java:4373)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.LinearLayout.setChildFram e(LinearLayout.java:1663)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.LinearLayout.layoutVertic al(LinearLayout.java:1521)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.LinearLayout.onLayout(Lin earLayout.java:1434)
02-11 11:01:13.937: W/ImageView(9802): at android.view.View.layout(View.java:14008 )
02-11 11:01:13.937: W/ImageView(9802): at android.view.ViewGroup.layout(ViewGroup. java:4373)
02-11 11:01:13.937: W/ImageView(9802): at android.widget.FrameLayout.onLayout(Fram eLayout.java:448)
02-11 11:01:13.937: W/ImageView(9802): at android.view.View.layout(View.java:14008 )
02-11 11:01:13.937: W/ImageView(9802): at android.view.ViewGroup.layout(ViewGroup. java:4373)
02-11 11:01:13.937: W/ImageView(9802): at android.view.ViewRootImpl.performLayout( ViewRootImpl.java:1892)
02-11 11:01:13.937: W/ImageView(9802): at android.view.ViewRootImpl.performTravers als(ViewRootImpl.java:1711)
02-11 11:01:13.937: W/ImageView(9802): at android.view.ViewRootImpl.doTraversal(Vi ewRootImpl.java:989)
02-11 11:01:13.937: W/ImageView(9802): at android.view.ViewRootImpl$TraversalRunna ble.run(ViewRootImpl.java:4351)
02-11 11:01:13.937: W/ImageView(9802): at android.view.Choreographer$CallbackRecor d.run(Choreographer.java:749)
02-11 11:01:13.937: W/ImageView(9802): at android.view.Choreographer.doCallbacks(C horeographer.java:562)
02-11 11:01:13.937: W/ImageView(9802): at android.view.Choreographer.doFrame(Chore ographer.java:532)
02-11 11:01:13.937: W/ImageView(9802): at android.view.Choreographer$FrameDisplayE ventReceiver.run(Choreographer.java:735)
02-11 11:01:13.937: W/ImageView(9802): at android.os.Handler.handleCallback(Handle r.java:725)
02-11 11:01:13.937: W/ImageView(9802): at android.os.Handler.dispatchMessage(Handl er.java:92)
02-11 11:01:13.937: W/ImageView(9802): at android.os.Looper.loop(Looper.java:137)
02-11 11:01:13.937: W/ImageView(9802): at android.app.ActivityThread.main(Activity Thread.java:5226)
02-11 11:01:13.937: W/ImageView(9802): at java.lang.reflect.Method.invokeNative(Na tive Method)
02-11 11:01:13.937: W/ImageView(9802): at java.lang.reflect.Method.invoke(Method.j ava:511)
02-11 11:01:13.937: W/ImageView(9802): at com.android.internal.os.ZygoteInit$Metho dAndArgsCaller.run(ZygoteInit.java:795)
02-11 11:01:13.937: W/ImageView(9802): at com.android.internal.os.ZygoteInit.main( ZygoteInit.java:562)
02-11 11:01:13.937: W/ImageView(9802): at dalvik.system.NativeStart.main(Native Method)
02-11 11:01:13.937: W/ImageView(9802): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
02-11 11:01:13.937: W/ImageView(9802): at libcore.io.Posix.open(Native Method)
02-11 11:01:13.937: W/ImageView(9802): at libcore.io.BlockGuardOs.open(BlockGuardO s.java:110)
02-11 11:01:13.937: W/ImageView(9802): at libcore.io.IoBridge.open(IoBridge.java:4 00)
02-11 11:01:13.937: W/ImageView(9802): ... 49 more
02-11 11:01:13.937: I/System.out(9802): resolveUri failed on bad bitmap uri: file:///android_asset/icons/aa.png


Добавлено через 58 минут
Цитата Сообщение от NiRamz Посмотреть сообщение
Почитайте про кастомные адапторы
Попробовал вот такой адаптер сделать:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class MyCursorAdapter extends SimpleCursorAdapter {
 
    public MyCursorAdapter(Context context, int layout, Cursor c,
            String[] from, int[] to) {
        super(context, layout, c, from, to);
    }
 
    @Override
    public void setViewImage(ImageView v, String value) {
        /*your code to convert value from database to drawable resource id*/
        v.setImageResource(Integer.valueOf(DataBase.COLUMN_IMG));
    }
 
}
Соответственно код поменялся на:
Java
1
2
3
4
5
6
7
8
String[] from = new String[] { DataBase.COLUMN_IMG, DataBase.COLUMN_TXT, DataBase.COLUMN_PRE };
        int[] to = new int[] { R.id.imgIcon, R.id.txtTitle, R.id.pre };
        
        cursor = db.getArt();
        startManagingCursor(cursor);
        scAdapter = new MyCursorAdapter(this, R.layout.listview_item_row, cursor, from, to);
        // присваиваем адаптер списку
        lvMain.setAdapter(scAdapter);
Ошибка теперь вот такая:
Кликните здесь для просмотра всего текста
02-11 11:54:27.813: E/AndroidRuntime(11495): FATAL EXCEPTION: main
02-11 11:54:27.813: E/AndroidRuntime(11495): java.lang.NumberFormatException: Invalid int: "pic"
02-11 11:54:27.813: E/AndroidRuntime(11495): at java.lang.Integer.invalidInt(Integer.jav a:138)
02-11 11:54:27.813: E/AndroidRuntime(11495): at java.lang.Integer.parse(Integer.java:375 )
02-11 11:54:27.813: E/AndroidRuntime(11495): at java.lang.Integer.parseInt(Integer.java: 366)
02-11 11:54:27.813: E/AndroidRuntime(11495): at java.lang.Integer.parseInt(Integer.java: 332)
02-11 11:54:27.813: E/AndroidRuntime(11495): at java.lang.Integer.valueOf(Integer.java:4 90)
02-11 11:54:27.813: E/AndroidRuntime(11495): at com.site.test.MyCursorAdapter.setViewIma ge(MyCursorAdapter.java:18)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.widget.SimpleCursorAdapter.bindV iew(SimpleCursorAdapter.java:158)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.widget.CursorAdapter.getView(Cur sorAdapter.java:250)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.widget.AbsListView.obtainView(Ab sListView.java:2159)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.widget.ListView.makeAndAddView(L istView.java:1831)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.widget.ListView.fillDown(ListVie w.java:674)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.widget.ListView.fillFromTop(List View.java:735)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.widget.ListView.layoutChildren(L istView.java:1652)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.widget.AbsListView.onLayout(AbsL istView.java:1994)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.view.View.layout(View.java:14008 )
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.view.ViewGroup.layout(ViewGroup. java:4373)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.widget.LinearLayout.setChildFram e(LinearLayout.java:1663)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.widget.LinearLayout.layoutVertic al(LinearLayout.java:1521)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.widget.LinearLayout.onLayout(Lin earLayout.java:1434)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.view.View.layout(View.java:14008 )
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.view.ViewGroup.layout(ViewGroup. java:4373)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.widget.FrameLayout.onLayout(Fram eLayout.java:448)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.view.View.layout(View.java:14008 )
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.view.ViewGroup.layout(ViewGroup. java:4373)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.widget.LinearLayout.setChildFram e(LinearLayout.java:1663)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.widget.LinearLayout.layoutVertic al(LinearLayout.java:1521)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.widget.LinearLayout.onLayout(Lin earLayout.java:1434)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.view.View.layout(View.java:14008 )
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.view.ViewGroup.layout(ViewGroup. java:4373)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.widget.FrameLayout.onLayout(Fram eLayout.java:448)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.view.View.layout(View.java:14008 )
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.view.ViewGroup.layout(ViewGroup. java:4373)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.view.ViewRootImpl.performLayout( ViewRootImpl.java:1892)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.view.ViewRootImpl.performTravers als(ViewRootImpl.java:1711)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.view.ViewRootImpl.doTraversal(Vi ewRootImpl.java:989)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.view.ViewRootImpl$TraversalRunna ble.run(ViewRootImpl.java:4351)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.view.Choreographer$CallbackRecor d.run(Choreographer.java:749)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.view.Choreographer.doCallbacks(C horeographer.java:562)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.view.Choreographer.doFrame(Chore ographer.java:532)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.view.Choreographer$FrameDisplayE ventReceiver.run(Choreographer.java:735)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.os.Handler.handleCallback(Handle r.java:725)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.os.Handler.dispatchMessage(Handl er.java:92)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.os.Looper.loop(Looper.java:137)
02-11 11:54:27.813: E/AndroidRuntime(11495): at android.app.ActivityThread.main(Activity Thread.java:5226)
02-11 11:54:27.813: E/AndroidRuntime(11495): at java.lang.reflect.Method.invokeNative(Na tive Method)
02-11 11:54:27.813: E/AndroidRuntime(11495): at java.lang.reflect.Method.invoke(Method.j ava:511)
02-11 11:54:27.813: E/AndroidRuntime(11495): at com.android.internal.os.ZygoteInit$Metho dAndArgsCaller.run(ZygoteInit.java:795)
02-11 11:54:27.813: E/AndroidRuntime(11495): at com.android.internal.os.ZygoteInit.main( ZygoteInit.java:562)
02-11 11:54:27.813: E/AndroidRuntime(11495): at dalvik.system.NativeStart.main(Native Method)


Поскольку присутствует в ошике, приведу кусок кода из калсса DataBase%
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
public class DataBase extends SQLiteAssetHelper {
 
        private static final String DATABASE_NAME = "base.db";
        private static final int DATABASE_VERSION = 1;
 
        public static final String COLUMN_ID = "_id";
        public static final String COLUMN_IMG = "pic";
        public static final String COLUMN_TXT = "name";
        public static final String COLUMN_PRE = "paragraph";
 
    public DataBase(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
 
 
    }
    
 
 
    public Cursor getArt() {
 
        SQLiteDatabase db = getWritableDatabase();
        SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
        String sqlTables = "articles_ru";
        String [] sqlSelect = {"0 _id", "name", "pic", "paragraph"}; 
        
 
        qb.setTables(sqlTables);
        Cursor c = qb.query(db, sqlSelect, null, null,
                null, null, null);
 
        c.moveToFirst();
        return c;
 
    }

Кто может подсказать что тут не правильно? Я уже голову всю сломал, помогите пожалуйста.

Добавлено через 1 час 19 минут
Весь вопрос свелся к этой строчке:
Java
1
v.setImageResource(Integer.valueOf(DataBase.COLUMN_IMG));
не понимаю каким образом мне присваивать нужное значение из базы, так как DataBase.COLUMN_IMG это всего лишь название колонки в таблице, каким образом мне заставить адаптер присваивать нужное значение??
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
11.02.2014, 11:32
Попробуйте COLUMN_IMG сделать int, или Integer.valueOf(DataBase.COLUMN_IMG) сделать отдельной строкой
0
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
11.02.2014, 11:39  [ТС]
Цитата Сообщение от KillAndEat Посмотреть сообщение
Попробуйте COLUMN_IMG сделать int, или Integer.valueOf(DataBase.COLUMN_IMG) сделать отдельной строкой
Та же самая ошибка выскакивает =(
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
11.02.2014, 11:46
а что вы хотите вообще получить?
0
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
11.02.2014, 11:50  [ТС]
Хочу получить данные из базы в ListView:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp">
 
     <ImageView
         android:id="@+id/imgIcon"
         android:layout_width="82dp"
         android:layout_height="82dp"
         android:layout_alignParentBottom="true"
         android:layout_alignParentTop="true"
         android:layout_marginBottom="5dp"
         android:layout_marginRight="15dp"
         android:layout_marginTop="5dp"
         android:gravity="center_vertical" />
 
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:orientation="vertical" >
 
         <TextView
             android:id="@+id/txtTitle"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:layout_gravity="left"
             android:layout_marginBottom="5dp"
             android:layout_marginTop="5dp"
             android:gravity="center_vertical"
             android:textColor="#FFB6C1"
             android:textSize="20dp"
             android:textStyle="bold" />
 
         <TextView
             android:id="@+id/pre"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="TextView"
             android:textColor="@color/wite"
             android:textSize="10dp" />
 
     </LinearLayout>
 
</LinearLayout>
Для обоих TextView все прекрасно получается в нужном виде при помощи:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
db = new DataBase(this);
        ListView lvMain = (ListView) findViewById(R.id.listView1);
        
//      ArtsAdapter adapter = new ArtsAdapter(this, 
//                R.layout.listview_item_row, t);
        
        String[] from = new String[] { DataBase.COLUMN_IMG, DataBase.COLUMN_TXT, DataBase.COLUMN_PRE };
        int[] to = new int[] { R.id.imgIcon, R.id.txtTitle, R.id.pre };
        
        cursor = db.getArt();
        startManagingCursor(cursor);
        scAdapter = new MyCursorAdapter(this, R.layout.listview_item_row, cursor, from, to);
        // присваиваем адаптер списку
        lvMain.setAdapter(scAdapter);
Но вот с картинками - незадача. Я уже голову сломал как это сделать.
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
11.02.2014, 11:53
Почитайте про кастомные адаптеры! Если вы сами пишете адаптер то у вас должен быть метод getView где вы будете присваивать данные строке в списке.

Добавлено через 1 минуту
http://startandroid.ru/ru/urok... apter.html
0
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
11.02.2014, 12:00  [ТС]
Цитата Сообщение от KillAndEat Посмотреть сообщение
Почитайте про кастомные адаптеры! Если вы сами пишете адаптер то у вас должен быть метод getView где вы будете присваивать данные строке в списке.

Добавлено через 1 минуту
http://startandroid.ru/ru/urok... apter.html
Хм, я читал этот урок, просто он немного из другой оперы - я данные из базы беру и присваиваю вот этой строкой
Java
1
2
3
4
5
6
String[] from = new String[] { DataBase.COLUMN_IMG, DataBase.COLUMN_TXT, DataBase.COLUMN_PRE };
        int[] to = new int[] { R.id.imgIcon, R.id.txtTitle, R.id.pre };
        
        cursor = db.getArt();
        startManagingCursor(cursor);
        scAdapter = new MyCursorAdapter(this, R.layout.listview_item_row, cursor, from, to);
Имеет ли смысл мне в моем адаптере это писать еще раз?

Просто у меня загвоздка только с ImageView - все остальное работает как надо
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
11.02.2014, 12:12
В таком случае зачем вы наследуете SimpleCursorAdapter и перегружаете setViewImage? Если наследуетесь извольте переопределить getView и остальные методы адаптера. А так используйте дефолтный SimpleCursorAdapter
0
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
11.02.2014, 12:39  [ТС]
Цитата Сообщение от KillAndEat Посмотреть сообщение
А так используйте дефолтный SimpleCursorAdapter
а я его изначально и использовал и проблема была такая же. для TextView все хорошо, данные выгружатся и отображаются правильно, а картинка нет. При этом картинку пробовал хранить в базе в виде пути к assets и в виде R.id.drawable - при лббом раскладе возникала ошибка что файл не найден

Добавлено через 14 минут
Вот такая ошибака выходит в логи - не понимаю как правильно сделать =(

Кликните здесь для просмотра всего текста
02-11 14:38:37.179: E/BitmapFactory(18329): Unable to decode stream: java.io.FileNotFoundException: /R.drawable.aa: open failed: ENOENT (No such file or directory)
02-11 14:38:37.179: I/System.out(18329): resolveUri failed on bad bitmap uri: R.drawable.aa
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
11.02.2014, 14:41
картинки хранятся в папке drawable а не в assets. Путь к ним выглядит как R.drawable.имя картинки
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
11.02.2014, 14:45
картинки можно хранить и в assets, но только вот способ получения разных из этих мест.
я бы все таки посоветовал написать свой небольшой адаптер, вышло бы намного быстрее и проще. а там уже без разницы что вы передадите, массив данных или курсор - работать будет в любом случаи
0
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
11.02.2014, 14:51  [ТС]
Цитата Сообщение от KillAndEat Посмотреть сообщение
картинки хранятся в папке drawable а не в assets. Путь к ним выглядит как R.drawable.имя картинки
Цитата Сообщение от NiRamz Посмотреть сообщение
картинки можно хранить и в assets, но только вот способ получения разных из этих мест.
Пробовал и тот и другой способ

Цитата Сообщение от NiRamz Посмотреть сообщение
я бы все таки посоветовал написать свой небольшой адаптер, вышло бы намного быстрее и проще. а там уже без разницы что вы передадите, массив данных или курсор - работать будет в любом случаи
К сожалению не так много знаний чтобы с нуля написать адаптер - точнее могу, но столкнусь с этой же проблемой.

Я не понимаю что именно не правильно в моем случае, в базе хранятся идентификаторы R.drawable.aa - но ошибка (см выше) возникает при любом раскладе.
Помогите понять в чем проблема - когда дойдет, тогда и свой адаптер смогу написать.
Спасибо
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
11.02.2014, 15:37
Проблема в том что программа не находит картинку. Может с названием какой косяк. Или типом.

Добавлено через 4 минуты
Позвольте отступление:

Java
1
2
3
4
5
6
final static Arts data_list[] = new Arts[] {
                    new Arts(R.drawable.aa, "item0"),
                    new Arts(R.drawable.ab, "item1"),
                    new Arts(R.drawable.ac, "item2"),
                    new Arts(R.drawable.ad, "item3")
    };
Я бы это на карту заменил
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.02.2014, 15:37
Помогаю со студенческими работами здесь

SybaseIQ : построить схему данных для базы
Учитывая что под sybase я раздела не нашёл создам тему здесь :) Есть SybaseIQ, на нём очень много табличек и баз, никаких схем данных в...

как правильно вывести информацию с базы данных?
создал таблицу, вывел из базы данных дату и фамилии студентов, также в этой базе имеется оценка, помогите пожалуйста, как правильно...

Как сделать правильно выборку из базы данных?
Привет форумчане! Я пока только учусь, так что не судите строго, но вопрос такой: У меня есть 2 страницы - одна index.php - сам...

Построить базы данных для учета времени работы строительного оборудования
Помогите построить базу данных, которая будет решать следующую задачу: Задача: построить базу данных, чтобы можно было определить сколько...

Как правильно скролить ListView который находится внутри другого ListView?
Доброго! Впихнул один ListView во внутрль другого, получил интересный эффект... если жмакнуть по элементу верхнего ListView, то скролл...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru