Как вывести в адаптер значение переменной вместо столбца базы данных
Подскажите пожалуйста, как можно передать в адаптер значение переменной. Чтобы в 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
→ Ссылка
Есть как минимум три варианта:
- перегнать курсор в список, попутно изменяя по усмотрению
- кастомизировать адаптер и высчитывать значения при вставке во вью
- посчитать прямо в 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);