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

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

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

ListView ячейки, получить Id элемента из SQLite - Программирование Android

14.11.2014, 22:29. Просмотров 1414. Ответов 10
Метки нет (Все метки)

есть база данных SQLITE. некоторые элементы БД выводятся в ListView через адаптер и вспомогательный XML. моя задача - в onItemClick перейти в другой активити, где выводятся все данные нажатого элемента ListView. для этого я хочу передать в новый активити через intent.putextra id элемента в БД. этот id не совпадает с "int position" или "long id" которые передаются в onItemClick. вопрос - как узнать id элемента в onItemClick?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2014, 22:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ListView ячейки, получить Id элемента из SQLite (Программирование Android):

Listview вывод данных и переход по нажатию на другой Listview SQLite - Программирование Android
Доброго извините за название темы, долго не мог сформировать название, В общем у меня беда с пытаюсь написать программу где первый экран...

Данные из SQlite в ListView, обработка события ListView - Программирование Android
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные int из БД. mList.setOnItemClickListener(new...

ListView, ToggleButton, SQLite, CursorAdapter. Как найти idItem в ListView, где была нажата ToggleButton? - Программирование Android
Добрый день. Затрудняюсь понять один момент: У меня есть ListView, который заполнен Items. Каждый Item - это свой XML. Пока...

ListView + SQLite - Программирование Android
Привет. Взял код из урока 52 на startandroid, немного его изменил public class DB { private static final String DB_NAME =...

ListView и SQLite - Программирование Android
Пишу первую простенькую игру.Пожалуйста подскажите как решить такую задачу: 1.Есть listview, в котором через simpleCursorAdapter...

Картинка из SQLite в ListView - Программирование Android
Здравствуйте.Есть несколько вопросов. 1 Как отобразить картинки в ListView из SQLite.Если картинки храняться в папке drawable? 2...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
14.11.2014, 23:20 #2
А вы в адаптер что вставляете? Сделайте класс, в котором будете хранить всю нужную вам информацию. А потом при клике по position вы будете иметь экземпляр этого класса, а соответственно и всю нужную вам информацию. Вот пример, который мне на этом же форуме пару лет назад дали, для изучения. Там все просто и очень удобно.
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
15.11.2014, 13:13 #3
kaban94, dubok79 дал вам хороший вариант, работающий отлично даже при фильтрации списка (если в будущем соберётесь делать поиск в ListView). Есть и другой способ. Храните одновременно с массивом ArrayList<String> data, который вы используете как источник для адаптера, второй массив в таком виде: ArrayList<Integer> arrId. Когда будете заполнять data, одновременно записывайте в arrId идентификаторы (id) записей. Потом сможете по position найти не только data[position], но и их arrId[position].
0
kaban94
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 15
16.11.2014, 02:03  [ТС] #4
А можно записывать id в data, но не добавлять в адаптер?
вот упрощенная версия моего кода. мне вроде не хватает для решения задачи пары строк.

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
     int titleColIndex = c.getColumnIndex("title");
     int priceColIndex = c.getColumnIndex("price");
     int idColIndex = c.getColumnIndex("id");
     ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>(100);
     Map<String, Object> m;
     do 
     {
        m = new HashMap<String, Object>();
        m.put("title", c.getString(titleColIndex).toString());
        m.put("price", c.getString(priceColIndex).toString());
        m.put("id", c.getInt(idColIndex));
        data.add(m);
      } while (c.moveToNext());
      String[] from = { "title", "price"};
      int[] to = { R.id.item1_title, R.id.item1_price };
      SimpleAdapter sAdapter = new SimpleAdapter(this, data, R.layout.item1, from, to);
      lv = (ListView) findViewById(R.id.lv);
      lv.setAdapter(sAdapter);
      lv.setOnItemClickListener(new OnItemClickListener(){
          @Override
          public void onItemClick(AdapterView<?> parent, View v, int position, long id)
            {
                
                // Здесь хочу получить "id", который я добавлял в строке 11 и записать его в переменную itemID
                Intent intent = new Intent(getApplicationContext(), ActivityEight.class);
                intent.putExtra("id", itemID);
                startActivity(intent);
            }
        }); 
      }
0
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
16.11.2014, 10:24 #5
kaban94, зря вы отказываетесь от расширенных возможностей, что я вам дал. Больше не меньше, к тому же код там простейший и не надо изобретать грабли. Вы должны оперировать понятием объект, а не по старинке - переменная. Поверьте без этого вам далеко не уйти.
0
kaban94
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 15
16.11.2014, 17:19  [ТС] #6
почему у вашего адаптера нет такого конструктора?
Java
1
(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
16.11.2014, 21:38 #7
А чего бы по значению кликнутого итема не получить его данные из БД? К чему лишние мапы, инты и циклы?
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
16.11.2014, 23:23 #8
Rube, этот вариант был бы хорош (и его можно оставить как вариант), если бы не 2 "но":
1) это снова обращение к БД, хотя всю информацию мы уже получили,
2) поиск и нахождение ключей по значениям - это обратная задача, которая не всегда даёт единственный ответ.
1
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
17.11.2014, 07:40 #9
А и так обращение идет 2 раза - для заполнения map и при заполнении адаптера.
Причем ресурсы трятятся неэффективно: во 2-ю активити надо передать всего один id, а map заполняется всеми данными из БД.
Правильней было бы передать id в активити и там получать его данные.
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
17.11.2014, 09:42 #10
Rube, да, это хороший подход. Но я ориентировался на вопрос задания:
Цитата Сообщение от kaban94 Посмотреть сообщение
передать в новый активити через intent.putextra id элемента в БД.
Т.е. человеку требуется по выделенной строке определить и передать дальше её id.
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
17.11.2014, 09:49 #11
Цитата Сообщение от CoolMind Посмотреть сообщение
Т.е. человеку требуется по выделенной строке определить и передать дальше её id.
Ширше мыслим, товарищи В конце концов ТС все равно придет к этому, как пить дать.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2014, 09:49
Привет! Вот еще темы с ответами:

Идентификация ListView + SQLite - Программирование Android
Есть БД sqlite, в ней таблица с полем _id (автоинкримент). ListView заполняю так: fillData(); ContactAdapter = new...

SQLite and ListView. Ввод и вывод данных - Программирование Android
Здравствуйте. Пишу программу(кто бы мог подумать). Есть подозрения, что данные в БД вбиваются не правильно или как раз выводятся...

Как записывать данные из SQLite в ListView - Программирование Android
Здравствуйте, задался таким вопросом. Есть SQLite таблица, данные в которой берутся из EditText. Я хочу их записывать их в ListView,...

Android, ListView, база данных SQLite - Программирование Android
Как достать картинку из БД (SQLite) и поместить её в ListView??? помогите, пожалуйста :)


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

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

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