您的位置:首页 > 移动开发 > Android开发

Android ListView控件显示数据库中图片

2013-06-04 08:41 387 查看
AndroidListView是比较常用的控件,但一直都觉得创建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());

}

}

}


 

运行结果:


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: