Как вывести в адаптер значение переменной вместо столбца базы данных

Подскажите пожалуйста, как можно передать в адаптер значение переменной. Чтобы в tv1 выводилось значение столбца COL1, а в tv2 значение переменной Massa.
Заранее благодарю!

@SuppressLint("NonConstantResourceId")
        @Override
        public void onClick (View v){

            if (TextUtils.isEmpty(etKolvo.getText().

                    toString())) {
                return;
            }

            int kolvo = (int) Float.parseFloat(etKolvo.getText().toString());

            switch (v.getId()) {
                case R.id.btnRaschet:
                    break;
            }
            try {
                db = FirstDataBaseHelper.getWritableDatabase();
                int Wid = (Integer) getIntent().getExtras().get(EXTRA_WID);


                cursor = db.query("TABLE",
                        new String[]{"_id","COL1", "COL2","COL3"},
                        "TYPE = ?",
                        new String[]{Integer.toString(wid)},
                        null, null, null);

                if (cursor.moveToFirst()) {
                    ListView lv1 = (ListView) findViewById(R.id.lv1);
                    ListView lv2 = (ListView) findViewById(R.id.lv2);
                    int massa = cursor.getInt(3);
                    int Massa = massa * kolvo;

                    SimpleCursorAdapter listAdapter = new SimpleCursorAdapter(this,
                            R.layout.recept_view,
                            cursor,
                            new String[]{"COL1", Integer.toString(Massa)},
                            new int[]{R.id.tv1, R.id.tv2},
                            0);

                    lv1.setAdapter(listAdapter);

Пробовал подставить через Integer.toString(Massa), но он вместо значения Massa пытается найти номер такого столбца.


Ответы (1 шт):

Автор решения: woesss

Есть как минимум три варианта:

  1. перегнать курсор в список, попутно изменяя по усмотрению
  2. кастомизировать адаптер и высчитывать значения при вставке во вью
  3. посчитать прямо в sql запросе и получить в курсоре уже посчитанное

Третий вариант мне нравится больше:

// не знаю можно ли это сделать методом query, поэтому меняю на rawQuery
cursor = db.rawQuery("select _id, COL1, COL2, COL3, (COL3 * " + kolvo + ") as MASSA " +
                     "from TABLE where TYPE = ?", new String[]{Integer.toString(wid)});

ListView lv1 = (ListView) findViewById(R.id.lv1);
ListView lv2 = (ListView) findViewById(R.id.lv2);

SimpleCursorAdapter listAdapter = new SimpleCursorAdapter(this,
                            R.layout.recept_view,
                            cursor,
                            new String[]{"COL1", "MASSA"},
                            new int[]{R.id.tv1, R.id.tv2},
                            0);

lv1.setAdapter(listAdapter);
→ Ссылка