Android ListView控件显示数据库中图片
来源:互联网 发布:淘宝差评师曝光台官网 编辑:程序博客网 时间:2024/05/19 16:07
Android中ListView是比较常用的控件,但一直都觉得创建ListView步骤有点繁琐,故在此总结一下,方便查阅。程序效果是实现一个显示联系人的简单信息。使用ListView控件,数据有姓名,和照片,并加入点击事件响应。
布局文件:
<?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控件显示数据库中图片
- Android ListView控件显示数据库中图片
- android中ListView不显示图片
- Android ListView显示图片
- Android数据库Sqlite查询显示到ListView控件
- Android-ScrollView中listview控件高度正确显示
- Android基础篇之在ListView中显示网络图片
- Android ListView中图片的异步加载显示
- Android ListView中图片的异步加载显示
- Android ListView中图片的异步加载显示
- 优化Android ListView中图片的异步加载显示
- 【Tech-Android-View】ListView滚动中显示图片错乱
- Android中listView中用于下载、显示图片
- Android基础篇之在ListView中显示网络图片
- android中ListView嵌套GridView图片显示的问题
- Android ListView滑动中图片显示重复错位问题
- android ListView显示网络图片
- android ListView显示网络图片
- POJ3468(线段树+延迟更新)
- 14_3Shape
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
- 记录
- android中的事件分发机制
- Android ListView控件显示数据库中图片
- JAVA基础面试
- 嵌入式开发是学软件好还是学硬件好
- 14周项目一.2(动物怎么叫)
- 2013年4月至6月工作日志
- java基础面试2
- 批量提取文件
- 创意字体设计欣赏和案例教程:火、烟、水、冰、霜特效
- java基础面试3