Android ListView控件显示数据库中图片
2013-06-04 08:41
387 查看
Android中ListView是比较常用的控件,但一直都觉得创建ListView步骤有点繁琐,故在此总结一下,方便查阅。程序效果是实现一个显示联系人的简单信息。使用ListView控件,数据有姓名,和照片,并加入点击事件响应。
布局文件:
在SimpleAdapter中需要一个数据源,用来存储数据的,在显示图片时我们要用HashMap<>存储一个Bitmap;但仅存取了Bitmap时在ListView中是无法显示图片的,我们需要对SimpleAdapter进行处理 。
如下是对SimpleAdaptr处理的主要代码:
java代码片段:
布局文件:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight"> <ImageView android:id="@+id/photo" android:layout_width="80dip" android:layout_height="20dip" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:adjustViewBounds="true" android:padding="2dip" /> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/photo" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:singleLine="true" android:ellipsize="marquee" android:textSize="20dip" /> </RelativeLayout>
在SimpleAdapter中需要一个数据源,用来存储数据的,在显示图片时我们要用HashMap<>存储一个Bitmap;但仅存取了Bitmap时在ListView中是无法显示图片的,我们需要对SimpleAdapter进行处理 。
如下是对SimpleAdaptr处理的主要代码:
java代码片段:
adapter.setViewBinder(new ViewBinder (){ publicboolean setViewValue(View view, Object data,String textRepresentation){ if(view instanceof ImageView && data instanceof Bitmap){ ImageView iv = (ImageView) view; iv.setImageBitmap((Bitmap)data); returntrue; }else{ returnfalse; } } });
可以使用Android.widget.SimpleAdapter.ViewBinder()方法来处理SimpleAdapter不直接支持的数据;
完整代码:
import com.ielims.DB.Database; import android.app.ListActivity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.SimpleAdapter.ViewBinder; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; publicclass Frm_Frends extends ListActivity { private String[] mListRoleName = { }; ListView mListView = null; ArrayList<Map<String, Object>> mData = new ArrayList<Map<String, Object>>();; @Override protectedvoid onCreate(Bundle savedInstanceState) { mListView = getListView(); GetCommonUsers(); //获取本地数据库Role表中用户信息 SimpleAdapter adapter = new SimpleAdapter(this, mData, R.layout.frends, new String[] { "photo", "name" }, newint[] { R.id.photo, R.id.name }); adapter.setViewBinder(new ViewBinder (){ publicboolean setViewValue(View view, Object data,String textRepresentation){ if(view instanceof ImageView && data instanceof Bitmap){ ImageView iv = (ImageView) view; iv.setImageBitmap((Bitmap)data); returntrue; }else{ returnfalse; } } }); setListAdapter(adapter); mListView.setOnItemClickListener(new OnItemClickListener() { //处理点击事件 publicvoid onItemClick(AdapterView<?> adapterView, View view, int position, long id) { Toast.makeText(Frm_Frends.this, "您选择了 " + mListRoleName[position], Toast.LENGTH_SHORT).show(); } }); super.onCreate(savedInstanceState); } /** * 获取本地数据库Role表中用户信息 */ protectedvoid GetCommonUsers() { String tbName = "Role"; //读取Role表中的用户姓名(name) 和照片(photo)两列信息 String[] col =new String[]{ "name", "photo"}; SQLiteDatabase database = (new Database(this)).openDatabase(); Cursor cursor = database.query(tbName, col, null, null, null, null, null); int num = cursor.getCount(); if (num > 0) { mListRoleName = new String[num]; int index = 0; String eName = ""; byte[] imgArr = null; Bitmap photo = null; // 必须使用moveToFirst方法将记录指针移动到第1条记录的位置 cursor.moveToFirst(); do { eName = cursor.getString(cursor.getColumnIndex("name")); mListRoleName[index++] = eName; imgArr = cursor.getBlob(cursor.getColumnIndex("photo")); Map<String, Object> item = new HashMap<String, Object>(); if(null != imgArr && imgArr.length > 0){ photo = BitmapFactory.decodeByteArray(imgArr, 0, imgArr.length); item.put("photo", photo); } else{ //如果用户没有上传头像资源,就用默认图标代替 item.put("photo", R.drawable.icon); } item.put("name", eName); mData.add(item); } while (cursor.moveToNext()); } } }
运行结果:
相关文章推荐
- Android ListView控件显示数据库中图片
- asp.net FileUpload 控件上传文件 以二进制的形式存入数据库并将图片显示出来
- GridView控件 Image控件 与图片的二进制数据库存储和显示
- GridView控件 Image控件 与图片的二进制数据库存储和显示
- GridView控件 Image控件 与图片的二进制数据库存储和显示
- vb.net实现Datagridview控件显示数据库中的图片
- rdlc控件数据库图片的显示 自测成功!
- 读写数据库中的图片,用imageenmview控件来作显示
- 对话框不用控件显示jpg图片
- bootstrap-wysiwyg中JS控件富文本中的图片由本地上传到服务器(阿里云、七牛、自己的数据库)
- mfc picture控件 显示图片最小化后重新打开图片消失?
- DataGrid显示图片(物理路径式和Stream流式)和添加图片到数据库
- 浅谈如何调用JSP读取数据库中图片并显示在页面上
- MFC CImage 类加载图片显示到控件
- opencv2.2 MFC picture控件中显示图片
- java swing awt绘制一个图片查看器 图片显示 图片控件
- 从数据库中读取二进制数据,并显示图片
- File文件控件,选中文件(图片,flash,视频)即立即预览显示
- 将图片QImage显示在QWidget控件上
- WPF用流的方式上传/显示/下载图片文件(保存在数据库)