有关ListView优化机制及滑动时数据错乱问题的讨论
class GridViewAdapter extends BaseAdapter{ LayoutInflater inflater; List<PackageInfo> pkInfos; public GridViewAdapter(Context context,List<PackageInfo> packageInfos) { inflater = LayoutInflater.from(context); this.pkInfos = packageInfos; } @Override public int getCount() { // TODO Auto-generated method stub return pkInfos.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return pkInfos.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View view = inflater.inflate(R.layout.gv_item, null); TextView tv = (TextView)view.findViewById(R.id.gv_item_appname); ImageView iv = (ImageView)view.findViewById(R.id.gv_item_icon); tv.setText(pkInfos.get(position).applicationInfo.loadLabel(getPackageManager())); iv.setImageDrawable(pkInfos.get(position).applicationInfo.loadIcon(getPackageManager())); return view; } }
1 class ListViewAdapter extends BaseAdapter{ 2 3 LayoutInflater inflater; 4 List<PackageInfo> pkInfos; 5 public ListViewAdapter(Context context,List<PackageInfo> packageInfos) { 6 inflater = LayoutInflater.from(context); 7 this.pkInfos = packageInfos; 8 } 9 @Override 10 public int getCount() { 11 // TODO Auto-generated method stub 12 return pkInfos.size(); 13 } 14 15 @Override 16 public Object getItem(int position) { 17 // TODO Auto-generated method stub 18 return pkInfos.get(position); 19 } 20 21 @Override 22 public long getItemId(int position) { 23 // TODO Auto-generated method stub 24 return position; 25 } 26 27 @Override 28 public View getView(int position, View convertView, ViewGroup parent) { 29 // TODO Auto-generated method stub 30 31 View view = inflater.inflate(R.layout.lv_item, null); 32 TextView ntv = (TextView)view.findViewById(R.id.lv_item_appname); 33 TextView ptv = (TextView)view.findViewById(R.id.lv_item_packagename); 34 ImageView iv = (ImageView)view.findViewById(R.id.lv_icon); 35 ntv.setText(pkInfos.get(position).packageName); 36 ptv.setText(pkInfos.get(position).applicationInfo.loadLabel(getPackageManager())); 37 iv.setImageDrawable(pkInfos.get(position).applicationInfo.loadIcon(getPackageManager())); 38 39 return view; 40 } 41 42 }
尽量自己构建适配器,这样加载速度快,效率高。哪怕简单的也尽量不要使用SimpleAdapter
view holder的用法:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <TextView android:id="@+id/userinfo1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_weight="4" /> <TextView android:id="@+id/userinfo2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2" /> <TextView android:id="@+id/userinfo3" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="4" /> <TextView android:id="@+id/userinfo4" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="3" /> <TextView android:id="@+id/userinfo5" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginRight="10dp" android:layout_weight="3" /> </LinearLayout>