转自http://lgb168.blog.163.com/blog/static/496744382011715335070/

布局文件:

    <? xml version="1.0" encoding="utf-8"?>
  1. < RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="fill_parent"
  3. android:layout_height="?android:attr/listPreferredItemHeight">
  4. < ImageView android:id="@+id/photo"
  5. android:layout_width="80dip"
  6. android:layout_height="20dip"
  7. android:layout_alignParentTop="true"
  8. android:layout_alignParentBottom="true"
  9. android:adjustViewBounds="true"
  10. android:padding="2dip" />
  11. < TextView android:id="@+id/name"
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:layout_toRightOf="@+id/photo"
  15. android:layout_alignParentBottom="true"
  16. android:layout_alignParentRight="true"
  17. android:singleLine="true"
  18. android:ellipsize="marquee"
  19. android:textSize="20dip" />
  20. </ RelativeLayout >

在SimpleAdapter中需要一个数据源,用来存储数据的,在显示图片时我们要用HashMap<>存储一个Bitmap;但仅存取了Bitmap时在ListView中是无法显示图片的,我们需要对SimpleAdapter进行处理 。

如下是对SimpleAdaptr处理的主要代码:

java代码片段:

  1. adapter.setViewBinder(new ViewBinder (){
  2. publicboolean setViewValue(View view, Object data,String textRepresentation){
  3. if(view instanceof ImageView && data instanceof Bitmap){
  4. ImageView iv = (ImageView) view;
  5. iv.setImageBitmap((Bitmap)data);
  6. returntrue;
  7. }else{
  8. returnfalse;
  9. }
  10. }
  11. });
可以使用Android.widget.SimpleAdapter.ViewBinder()方法来处理SimpleAdapter不直接支持的数据;
完整代码:
  1. import com.ielims.DB.Database;
  2. import android.app.ListActivity;
  3. import android.database.Cursor;
  4. import android.database.sqlite.SQLiteDatabase;
  5. import android.graphics.Bitmap;
  6. import android.graphics.BitmapFactory;
  7. import android.os.Bundle;
  8. import android.view.View;
  9. import android.widget.AdapterView;
  10. import android.widget.ImageView;
  11. import android.widget.ListView;
  12. import android.widget.SimpleAdapter; 
  13. import android.widget.SimpleAdapter.ViewBinder; 
  14. import android.widget.Toast;
  15. import android.widget.AdapterView.OnItemClickListener;
  16. import java.util.ArrayList;
  17. import java.util.HashMap;
  18. import java.util.Map;
  19. publicclass Frm_Frends extends ListActivity {
  20.  private String[] mListRoleName = { };
  21.  ListView mListView = null;
  22.  ArrayList<Map<String, Object>> mData = new ArrayList<Map<String, Object>>();;
  23.  @Override
  24.  protectedvoid onCreate(Bundle savedInstanceState) {
  25.  mListView = getListView();
  26.  GetCommonUsers(); //获取本地数据库Role表中用户信息
  27.  SimpleAdapter adapter = new SimpleAdapter(this, mData, R.layout.frends,
  28.  new String[] {
  29.  "photo", "name"
  30.  }, newint[] {
  31.  R.id.photo, R.id.name
  32.  }); 
  33.  adapter.setViewBinder(new ViewBinder (){
  34.  publicboolean setViewValue(View view, Object data,String textRepresentation){
  35.  if(view instanceof ImageView && data instanceof Bitmap){
  36.  ImageView iv = (ImageView) view;
  37.  iv.setImageBitmap((Bitmap)data);
  38.  returntrue;
  39.  }else{
  40.  returnfalse;
  41.  }
  42.  }
  43.  });
  44.  setListAdapter(adapter);
  45.  mListView.setOnItemClickListener(new OnItemClickListener() {
  46.  //处理点击事件
  47.  publicvoid onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
  48.  Toast.makeText(Frm_Frends.this, "您选择了 " + mListRoleName[position],
  49.  Toast.LENGTH_SHORT).show();
  50.  }
  51.  });
  52.  super.onCreate(savedInstanceState);
  53.  }
  54.  /**
  55.  * 获取本地数据库Role表中用户信息
  56.  */
  57.  protectedvoid GetCommonUsers()
  58.  {
  59.  String tbName = "Role";
  60.  //读取Role表中的用户姓名(name) 照片(photo)两列信息
  61.  String[] col =new String[]{ "name", "photo"}; 
  62.  SQLiteDatabase database = (new Database(this)).openDatabase();
  63.  Cursor cursor = database.query(tbName, col, null, null, null, null, null);
  64.  int num = cursor.getCount(); 
  65.  if (num > 0) {
  66.  mListRoleName = new String[num];
  67.  int index = 0;
  68.  String eName = "";
  69.  byte[] imgArr = null;
  70.  Bitmap photo = null;
  71.  // 必须使用moveToFirst方法将记录指针移动到第1条记录的位置
  72.  cursor.moveToFirst();
  73.  do {
  74.  eName = cursor.getString(cursor.getColumnIndex("name")); 
  75.  mListRoleName[index++] = eName; 
  76.  imgArr = cursor.getBlob(cursor.getColumnIndex("photo"));
  77.  Map<String, Object> item = new HashMap<String, Object>();
  78. if(null != imgArr && imgArr.length > 0){
  79.  photo = BitmapFactory.decodeByteArray(imgArr, 0, imgArr.length);
  80.  item.put("photo", photo);
  81.  }
  82.  else{ //如果用户没有上传头像资源,就用默认图标代替
  83.  item.put("photo", R.drawable.icon);
  84.  }
  85.  item.put("name", eName);
  86.  mData.add(item);
  87.  } while (cursor.moveToNext());
  88.  }
  89.  }
  90. }
运行结果:
                            

更多相关文章

  1. android的短信发送全过程源代码分析
  2. Android(安卓)取消GridView和ListView item被点击时的效果
  3. android下数据库SQLite
  4. android 学习笔记6——分页标签之TabHost
  5. Android(安卓)自定义AlertDialog 去黑边终极解决方案(亲测有效!)
  6. android java js 回调 真心好用

随机推荐

  1. android 访问web端与解析json,模拟用户登
  2. android播放提示音工具类(SoundConfigUti
  3. Android布局之相对布局——RelativeLayou
  4. Android开发9——Activity的启动模式
  5. 关于android读取ICCID、IMSI和IMEI
  6. Android(安卓)FrameWork——Touch事件派
  7. Android中级进阶 FAQ
  8. Android原生(Native)C开发
  9. Activity UI显示的学习总结
  10. Android内存泄漏查找(1)