【8.3】关于simpleAdapter没法显示bitmap的问题

阅读更多

这个问题很棘手,打log明明都找了视频缩略图bitmap的路径,但就是显示出来

 

其实是simpleAdapter自己的问题,它有自己的view绑定规则

 

可以先看看这个:http://www.cnblogs.com/over140/archive/2010/12/15/1906303.html

 

在看看这个:http://hi.baidu.com/blue_hmq/blog/item/03baf6ca02cf1614bf09e663.html

 

其中说道:

SimpleAdapter类:一个使静态数据和在XML中定义的Views对应起来的简单adapter。你可以把list上的数据指定为一个Map范型的ArrayList。ArrayList里的每一个条目对应于list里的一行。Maps包含着每一行的数据。你先要指定一个XML,这个XML定义了用于显示一行的view。你还要指定一个对应关系,这个对应关系是从Map的keys对应到指定的views。绑定数据到views发生在两个阶段:

 

如果一个simpleAdapter.ViewBinder是可用的,那么SetViewValue(android.view.View,Object,String)要被调用。如果返回true,那么绑定发生了。如果返回false,那么如下views将被按顺序地尝试:

 

~实现了Checkable的View(如CheckBox),预期的绑定值是boolen

 

~TextView,预期的绑定值是String,并且SetViewText方法被调用

 

ImageView,预期的绑定值是一个资源的id或String。并且SetViewImage方法被调用

 

如果没有合适的绑定被发现,一个IllegalStateException被抛出。

 

simpleAdapter果然够静态……泪流满面中

 

解决方法,自己重写imangView的绑定规则:

 

看看这个:http://www.anddev.org/listview_simpleadapter_and_bitmaps_-_bug_-t11817.html

 

adapter.setViewBinder(new MyViewBinder());

 

public class MyViewBinder implements ViewBinder {

 

@Override

public boolean setViewValue(View view, Object data, String textRepresentation) {

if( (view instanceof ImageView) & (data instanceof Bitmap) ) {

ImageView iv = (ImageView) view;

Bitmap bm = (Bitmap) data;

iv.setImageBitmap(bm);

return true;

}

 

return false;

}

 

}

 

用位与符号&而不用&&的原因未知,知道的同学不吝赐教

 


你可能感兴趣的:(【8.3】关于simpleAdapter没法显示bitmap的问题)