【问题标题】:Using ViewBinder to update an image in a `ListView` row使用 ViewBinder 更新“ListView”行中的图像
【发布时间】:2012-03-19 10:26:20
【问题描述】:

我有一个从SimpleCursorAdapter 填充的ListView,每行包含一些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;      
          } 
        });

如果有人可以帮助我,我将不胜感激!

【问题讨论】:

  • 您是否还使用您的cursorAdapter 在ListView 上调用setAdapter

标签: android android-listview android-imageview android-viewbinder


【解决方案1】:

如果您只想根据某些值更新 ImageView,如果这些值存储在 DB 中,您可以执行如下 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 ..."

希望它有所帮助,并且是您所需要的。

【讨论】:

    【解决方案2】:

    试试

    sign2.setBackgroundResource(R.drawable.other);
    

    在我尝试基于if statement 设置图像的非常相似的情况下为我工作。

    【讨论】:

      【解决方案3】:

      我看不到您尝试在哪里为 ImageView 设置不同的资源。它总是 R.drawable.other。根据您的光标数据更改图像资源。

      【讨论】:

      • 对不起,让我澄清一下,imageview 在 xml 中定义了 R.drawable.check 资源,如果满足某个条件,我想将其设置为不同的图像。但是,我什至一开始就无法改变图像。如果我能解决这个问题,剩下的就交给我了!
      • 哦。我猜你的图像视图不是根视图。删除检查视图 ID 并以这种方式获取 ImageView:view.findViewById(R.id.imageloc)
      • 它没用 :( 问题是如果对象是 TextView 并且我让它更改文本,这段代码都可以完美运行......它只是在它变成 ImageView 的那一刻它没有想换个图。呃
      • 好的。请告诉我你是如何创建适配器的。
      • 这里是 getListView().invalidateViews()。
      猜你喜欢
      • 2011-12-28
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      相关资源
      最近更新 更多