Страница 1 из 2
биндер,адаптер,листвью и массив данных... давайте попорядку
Добавлено: 22 окт 2013, 04:05
парень
есть листвью, с адаптером симплеадаптер
есть свойбиндер (для того чтобы первому элементу задать один фон, последнему другой)
есть эллемент листвью ввиде отдельного файла структура такая:
<LinearLayout (gorizontal)>
<LinearLayout > <imageview></linearlayout>
<linearLayout> <textview></linearlayout>
Задача такая чтобы в <textView> попадали данные из базы ввиде: сумма и валюта. их может быть одна запись, а может и пять, цвет должен быть в зависимости от баланса (красный или зеленый).
примерно так:
первый эллемент списка:
1000 RUB
-500 USD
128 EUR
Второй:
5000 RUB
третий....
я вижу такое решение:
нам нужно в адаптере передавать не просто текст или цифру в биндер, а список данных желательно map<String,Integer>, только как мне это сделать? - передать то вроде получается, как с ними в биндере работать? в 50 уроке все сжато описано. Из обьекта в цифру или строку я данные получаю легко. А как мне получить map?
голова отключается. ушел спать. 5 часов просидел за "этим"...
скажите мне что есть решение проще и ссылку если сталкивались,знаете...
и еще один вопрос - как лучше реализовать наполнение поля с цифрами? программно добавлять каждый эллемент (если есть) или еще один список без прокрутки(если есть такой)...
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 22 окт 2013, 11:54
anber
Используй вместо симплеадаптер класс наследник от BaseAdapter.
В конструктор ему передавай список Map или любых других классов которые тебе нужны.
На вскидку будет выглядеть так:
Код: Выделить всё
public abstract class CustomListAdapter extends BaseAdapter {
private List<Map> itemsList;
private LayoutInflater inflater;
public CustomListAdapter(Context context, List<Map> itemsList) {
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return itemsList.size();
}
@Override
public Map getItem(int i) {
return itemsList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(final int position, View view, ViewGroup viewGroup) {
if (view == null) {
view = inflater.inflate(R.layout.your_layout, null);
}
// instantiateView...
return view;
}
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 22 окт 2013, 13:10
Foenix
не понимаю, почему если используешь бд, то не использовать курсорадаптер, сразу выбирая в запрос то, что нужно - обе колонки, а потом точно так же переопределить гетвью, чтобы раскрасить? Получится гораздо проще, а не городуха из кучи кубиков.
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 22 окт 2013, 16:16
парень
не знаю меняет ли чтото, но у меня структура такая:
есть база с данными из которой наполняется листвью (картинка, текст, баланас)
у каждой строки базы есть своя база с содержанием баланса в виде (id, valuta, balans) - эти данные и надо поместить в итем листвью в контейнер "баланс".
сори если криво объяснил...
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 22 окт 2013, 16:28
парень
вопрос такой: можно в этот контейнер сделать еще один листвью без обработки и прокрутки?
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 22 окт 2013, 16:30
парень
anber писал(а):
В конструктор ему передавай список Map или любых других классов которые тебе нужны.
map я передаю и так как у меня сделано в биндер. А вот как в биндере извлечь из Object'a map мой и как с ним работать )))) глупый вопрос, да ? )))
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 22 окт 2013, 16:45
rezak90
парень писал(а):у каждой строки базы есть своя база
Если это то как здесь написано это пздц (sorry).
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 22 окт 2013, 17:54
парень
rezak90 писал(а):парень писал(а):у каждой строки базы есть своя база
Если это то как здесь написано это пздц (sorry).
обьясни почему пздц?
мне нужно хранить около 10 строк данных (id(integer), name(String), image(integer)) и у каждой строки есть еще "баланс" - ввиде "сумма"-"валюта". их может быть как 1 строка, так и 10. (обычно будет 1-3).
поэтому есть таблица table (id(integer), name(String), image(integer)).
и таблицЫ table_id(где id это привязка к первой таблице к конкретной строке)
размножение таблиц возможно только пользователем. программно при удалении строки в table с id=5(например), тут же удаляется table_5 и т.д.
это на корню не верная реализация? просто не придумал как лучше хранить такую инфу.
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 22 окт 2013, 18:10
парень
или может сделать тогда одну базу id,name,image,bal1,val1,bal2,val2,bal3,val3,bal4,val4,bal5,val5 и т.д. - до 10 например. и сделать ограничение на не более 10 валют.
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 22 окт 2013, 18:39
rezak90
я лучше дам слово тёте Инне, она более литературно расскажет что да как =)
P.S. я о миссис Foenix
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 22 окт 2013, 20:18
Foenix
парень писал(а):или может сделать тогда одну базу id,name,image,bal1,val1,bal2,val2,bal3,val3,bal4,val4,bal5,val5 и т.д. - до 10 например. и сделать ограничение на не более 10 валют.
никогда так не делай
не знаю меняет ли чтото, но у меня структура такая:
есть база с данными из которой наполняется листвью (картинка, текст, баланас)
это не описание структуры
парень писал(а):
у каждой строки базы есть своя база
внутри базы данных содержатся таблицы. Внутри таблиц - строки. Внутри строк - ячейки. Внутри ячеек - данные. Лучше придерживаться такой лексики.
парень писал(а):
итем листвью в контейнер "баланс".
это я вообще не поняла что такое.
Прочти уроки с 34го все, что касаются баз данных, затем урок 52.
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 22 окт 2013, 22:30
rezak90
Foenix, хотя бы чуточку сарказма прибавила бы
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 22 окт 2013, 22:46
Foenix
тебе б прибавила, да сил уже нету никаких.
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 23 окт 2013, 00:01
KamiSempai
Я понял о чем он. По мне, так самым быстрым и менее геморойным решением будет взять ExpandableListView и переопределить метод isGroupExpanded(int groupPosition), что бы он всегда возвращал true. Еще можно заглушить метод collapseGroup(int groupPos) также переопределив его и возвращать false без вызова метода суперкласса.
В итоге получится список который всегда раскрыт.
Группы будут элементами списка, а строки списками валют.
Ни каких Map делать не нужно. Можно сразу делать выборку из базы.
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 23 окт 2013, 02:29
парень
в первую очередь хочу сказать спасибо всем кто поделился мыслями и помогает мне.
наваял картинку... надеюсь так нагляднее.
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 23 окт 2013, 02:32
парень
KamiSempai писал(а):Я понял о чем он. По мне, так самым быстрым и менее геморойным решением будет взять ExpandableListView и переопределить метод isGroupExpanded(int groupPosition), что бы он всегда возвращал true. Еще можно заглушить метод collapseGroup(int groupPos) также переопределив его и возвращать false без вызова метода суперкласса.
В итоге получится список который всегда раскрыт.
Группы будут элементами списка, а строки списками валют.
Ни каких Map делать не нужно. Можно сразу делать выборку из базы.
спасибо. завтра буду делать.
Есть еще идеи?
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 23 окт 2013, 11:18
Foenix
вот это я понимаю! хотела попросить картинку, да думала - все равно не будешь делать..
позже отвечу, через пару часов, сейчас времени нет. Структура базы данных неверная. Тут нужно всего 2 таблицы. Остальное все просто.
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 23 окт 2013, 17:08
парень
буду очень благодарен.
на данный момент сделал программное наполнение через цикл эллементов и addView ))) убого как то... обработчик не могу сделать.
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 23 окт 2013, 18:37
Foenix
Значит так. Поправь, если я не права и что-то не так поняла.
я вижу на экране список1 из текстовых элементов и картиночек, в котором пока 4 элемента. К каждому элементу прилагается еще один список2, где каждому элементу из списка1 соответствует несколько элементов из списка 2. Только не пойму что это за 1, 2, 3, 4 циферки, стоящие справа.
Таким образом, база данных будет состоять из 3 таблиц (предварительно).
1 таблица MAIN (временное название) - это основной список. его поля:
_id - integer, формируется автоматически.
image - blob картинка. Т.к. картика небольшая и табличка небольшая, ее допустимо хранить в blob-формате прямо в таблице. Но можно и хранить отдельно, а в таблицу, вместо этого поля вносить путь к картинке, тогда поле станет String.
2 таблица вспомогательная, называется "справочник" валют Valute
_id integer, формируется автоматически
val_code - допустим если нужен код валюты String
val_name - наименование String
3 таблица - это твои дополнительные списки DETAILS. Поля будут такие:
_id - integer, формируется автоматически.
id_main - integer, это поле является ссылкой на _id поле главной таблицы MAIN (формирование названия желательно так)
summa - integer (если целое, допустим), это сумма или по-твоему баланс
id_valute - integer, ссылка на код валюты строку _id из справочника валют
Это что касается структуры базы данных.
Таким образом, таблица 2 у тебя будет по твоему рисунку выглядеть примерно так:
_id id_main summa id_valute
1 1 1024 1
2 1 500 2
3 1 684 3
4 2 -785 1
5 2 300 2
6 3 100 3
7 4 650 4
8 4 -456 5
справочник валют
1 руб
2 usd
3 eur
4 jpy
5 chr
ну а main сам сообразишь)
Re: биндер,адаптер,листвью и массив данных... давайте попоря
Добавлено: 23 окт 2013, 18:46
Foenix
Далее запросы для выборки данных для отображения.
1 списочек
select * from main
2 это балансы для каждой строки из списка 1
select details._id, details.summa, valute.name from details left outer join valute on details.id_valute=valute._id where details.id_main = ?
каждому ? соответсвует _id из main
вот так.