Страница 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
тебе б прибавила, да сил уже нету никаких. :P

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
вот так.