Использование ViewBinder для обновления изображения в строке `ListView` - PullRequest
2 голосов
/ 01 марта 2012

У меня есть 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 ]

2 голосов
/ 30 октября 2012

Если вы хотите обновить 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 ..."

Надеюсь, это поможет и то, что вам нужно.

1 голос
/ 06 февраля 2013

Попробуйте

sign2.setBackgroundResource(R.drawable.other);

Работал для меня в очень похожей ситуации, когда я пытался установить изображение на основе if statement.

0 голосов
/ 01 марта 2012

Я не вижу, где вы пытаетесь установить другой ресурс для ImageView.Это всегда R.drawable.other.Изменить ресурс изображения на основе ваших данных курсора.

...