ListView优化 不用ViewHolder(Google 不推荐) SimpleAdapter 就真的Simple了吗

来源:互联网 发布:阿里云 机房地址 编辑:程序博客网 时间:2024/05/15 17:53

[置顶] ListView优化 不用ViewHolder(Google 不推荐) SimpleAdapter 就真的Simple了吗

分类: Java学习 234人阅读 评论(0) 收藏 举报

 现在很多人再给ListView的时候使用BaseAdapter来填充 在getView方法中 使用ViewHolder来优化 这中方法的确很达到优化的效果但仅仅是百分之70到80 

  很多人忽略了SimpleAdapter或者SimpleCursorAdapter(数据源在本地数据库中)本身的使用方法 都以为使用

[java] view plaincopy
  1. SimpleCursorAdapter adapter2=new SimpleCursorAdapter(context, layout, cursor, from, to) //这样的方式    
 

其实SimpleAdapter/SimpleCursorAdapter可以像BaseAdapter 一样  BaseAdapter 的优化效果已经在SimpleAdapter中已经实现了 不用开发者去holder.xxx=view.findViewByID 

[java] view plaincopy
  1.   
[java] view plaincopy
  1. <pre name="code" class="java">Cursor cursor=getContentResolver().query(  
  2.                         CONTENT_URI,   
  3.                         null,  
  4.                         WATCH_DATE.getName() + "=?",  
  5.                         new String[] { watchDate },  
  6.                         WATCH_TIME.getName() + " DESC"  
  7.                         );  
  8.                 SimpleCursorAdapter adapter=new SimpleCursorAdapter(context,  
  9.                         R.layout.layoutId,   
  10.                         cursor,  
  11.                         new String[]{  
  12.                             NAME.getName(),  
  13.                             CONTENT.getName(),  
  14.                             SCHEDULE.getName(),  
  15.                             TOTAL_TIME.getName(),  
  16.                             POSITION.getName(),  
  17.                             TOTAL_POSITION.getName()  
  18.                         },   
  19.                         new int[]{  
  20.                             R.id.name,  
  21.                             R.id.image,  
  22.                             R.id.progress  
  23.                         },SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);  
  24.                   
  25.                 adapter.setViewBinder(new ViewBinder() {  
  26.                       
  27.                     @Override  
  28.                     public boolean setViewValue(View view, Cursor c, int columnIndex) {  
  29.                         final String content = c.getString(CONTENT.getIndex());  
  30.                         long schedule = c.getLong(SCHEDULE.getIndex());  
  31.                         long totalTime = c.getLong(TOTAL_TIME.getIndex());  
  32.                           
  33.                         int position = c.getInt(POSITION.getIndex());  
  34.                         int totalPosition = c.getInt(TOTAL_POSITION.getIndex());  
  35.                         switch (view.getId()) {  
  36.                         case R.id.global_media_item_playback_progress:  
  37.                             ProgressBar progress=((ProgressBar) view);  
  38.                             <span style="font-family:Arial,Helvetica,sans-serif">progress</span>.setMax(100);  
  39.                             if (totalPosition > 1) {  
  40.                                 <span style="font-family:Arial,Helvetica,sans-serif">progress</span>.setProgress(100 * position / totalPosition);  
  41.                             } else {  
  42.                                 if (totalTime > 0) {  
  43.                                     schedule = schedule > totalTime ? totalTime : schedule;  
  44.                                     progress.setProgress((int) (100 * schedule / totalTime));  
  45.                                 } else {  
  46.                                     progress.setProgress(0);  
  47.                                 }  
  48.                             }  
  49.                             return true;  
  50.                         case R.id.image:  
  51.                             ImageView mCover=(ImageView)view;  
  52.                             String coverUrl = c.getString(IMAGE.getIndex());  
  53.                             mCover.setContentDescription(content);  
  54.                             view.setFocusable(true);  
  55.                             view.setOnClickListener(new View.OnClickListener() {  
  56.                                 @Override  
  57.                                 public void onClick(View v) {  
  58.                                     Intent itt = new Intent(xxxx.this, xxxx.class);  
  59.                                     if (content != null) {  
  60.                                         itt.putExtra("content", content);  
  61.                                         startActivity(itt);  
  62.                                     }  
  63.                                 }  
  64.                             });  
  65.   
  66.                             Utility.displayImage(coverUrl, mCover, null,R.drawable.media_player_default_media_noframe);  
  67.                             return true;  
  68.                         default:  
  69.                             break;  
  70.                         }  
  71.                         return false;  
  72.                     }  
  73.                 });</pre><br><br>  
[java] view plaincopy
  1.   


是不是和之前的BaseAdapter神似  但是效率提高了不少 很多事情都是由系统去完成的 



如果有说的不对的地方 留言哦 我会及时改正的

0 0