Всем привет.
Есть база данных SQLite и есть ListView для вывода ее значений. Необходимо в ListView (а именно в ImageView, находящийся в разметке элемента списка) вставить картинку, соответствующую значению поля таблицы. Соответствие определяет HashMap, который содержит идентификатор изображения(ключ) и строку (значение). Почитал как это делать при помощи метода setViewValue интерфейса ViewBinder, переопределил его и задал логику работы, однако правильного результата не добился - картинка не устанавливается. Не подскажите ли, в чем причина?
package ru.polpaketa.moneystat;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
public class DayTab extends Fragment {
ListView dayList;
DBHelper dbHelper;
Cursor c;
SimpleCursorAdapter adapter;
Binder binder;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_day_tab, container, false);
dayList = (ListView) view.findViewById(R.id.expList);
dbHelper = new DBHelper(getContext());
binder = new Binder();
Date dateNow = new Date();
SimpleDateFormat formatForDateNow = new SimpleDateFormat("yyyy.MM.dd");
c = dbHelper.getDayData(formatForDateNow.format(dateNow));
String[] from = new String[] {DBHelper.COL_2, DBHelper.COL_3, DBHelper.COL_4};
int[] to = new int[] {R.id.tvExp,R.id.tvCat,R.id.tvDate};
adapter = new SimpleCursorAdapter(getContext(), R.layout.adapter_item, c, from, to, 0);
//Устанавливаем Binder
adapter.setViewBinder(binder);
//Устанавливаем адаптер
dayList.setAdapter(adapter);
//Обработка нажатия на элемент ListView
dayList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView tv = (TextView) view.findViewById(R.id.tvExp);
Toast.makeText(getContext(), tv.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
return view;
}
private static class Binder implements SimpleCursorAdapter.ViewBinder {
@Override
public boolean setViewValue(View view, Cursor c, int i) {
//Значение по умолчанию
int imgLink = R.drawable.beach;
if (view.getId() == R.id.imgHistCat) {
//Текущее значение поля таблицы
String item_content = c.getString(i);
//Ищем подходящий ключ в HashMap
for (Map.Entry<Integer,String> pair : ImageTextAdapter.imageTextMap.entrySet()) {
if (item_content.equals(pair.getValue())) {
imgLink = pair.getKey();
break;
}
}
((ImageView)view).setImageResource(imgLink); //Устанавливаем в ImageView соответствующую картинку
return true;
}
return false;
}
}
}
Так у вас же в этом списке нет ImageView
int[] to = new int[] {R.id.tvExp,R.id.tvCat,R.id.tvDate};
Поэтому адаптер даже и не пытается ее байндить.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости