Не выполняется метод setViewValue адаптера

200
15 декабря 2017, 03:09

Всем привет. Есть база данных 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;
        }
    }
}
Answer 1

Так у вас же в этом списке нет ImageView

int[] to = new int[] {R.id.tvExp,R.id.tvCat,R.id.tvDate};

Поэтому адаптер даже и не пытается ее байндить.

READ ALSO
Кастомный ProgressBar android

Кастомный ProgressBar android

Хочу сделать ProgressBar который состоит из 5-ти звездФон у этих звезд серый и при увеличении прогресса эти звезды должны заполнятся золотым цветом

195
Подключение в maven сторонней библиотеки

Подключение в maven сторонней библиотеки

Вопрос, хочу добавитьjar библиотеку к maven проекту, чтобы потом jenkins собирался нормально

203
Как проверить, входят ли все элементы одного словаря в другой?

Как проверить, входят ли все элементы одного словаря в другой?

Как можно проверить, содержит ли словарь map1 все пары <Key, Value>, содержащиеся в map2?

176
Почему не инжектится переменная Dagger2

Почему не инжектится переменная Dagger2

Вот сделал имплементацию дагера и вроде как все работет, вот только context переменная не хочет инжектиться

245