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

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

10.02.2014, 11:32. Показов 4690. Ответов 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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru