Использование ViewBinder для обновления изображения в строке `ListView`
У меня есть ListView
заселены из SimpleCursorAdapter
каждая строка содержит TextViews
и ImageView
, Я хочу изменить ImageView
для каждой строки в зависимости от некоторых значений, однако я пытаюсь сначала выяснить, как обновить ImageView
в списке после его заполнения. Я попробовал этот код, но ImageView
остается такой же:
cursorAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
int viewId = view.getId();
Log.v("ViewBinder", "columnIndex=" + columnIndex + " viewId = " + viewId);
if(viewId == R.id.imageloc)
{
sign2 = (ImageView) view;
sign2.setImageResource(R.drawable.other);
return true;
}
return false;
}
});
Если кто-нибудь может мне помочь, я был бы признателен!
3 ответа
Если вы хотите обновить ImageView только в зависимости от некоторых значений, если эти значения хранятся в БД, вы можете выполнить SQL-запрос следующим образом:
SELECT _id, name, CASE WHEN checked = 1 THEN 'R.drawable.check' ELSE 'R.drawable.check' END as img FROM table;
Делая это таким образом, вам не нужно использовать метод setViewBinder(). Просто сделайте запрос, получите курсор, назначьте его SimpleCursorAdapter и назначьте адаптер для представления списка.
Cursor c = mDbHelper.fetchData(sqlQuery);
(...)
String[] from = new String[]{"name", "img"};
int[] to = new int[]{R.id.text_view, R.id.imgageloc};
SimpleCursorAdapter _adapter = new SimpleCursorAdapter(this, R.layout.data_rows, c, from, to);
setListAdapter (_adapter);
Примечание: вам понадобится целочисленное значение R.drawable.check/R.drawable.check: " ... THEN '" + R.drawable.check + "' ELSE ..."
Надеюсь, это поможет и это то, что вам нужно.
Пытаться
sign2.setBackgroundResource(R.drawable.other);
Работал для меня в очень похожей ситуации, когда я пытался установить изображение на основе if statement
,
Я не вижу, где вы пытаетесь установить другой ресурс для ImageView. Это всегда R.drawable.other. Изменить ресурс изображения на основе ваших данных курсора.