ListView优化(一)
ListView是非常常用的控件,而掌握好对它的优化又是重中之重.简单ListView的优化
1.先搞定主界面配置文件,非常简单一个ListView:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/lv_demo_mainactivity" /> </LinearLayout>
2.主界面代码.很简单findview并给它设置一个BaseAdapter.
1 public class MainActivity extends Activity { 2 ListView lv_demo_mainactivity; 3 @Override 4 public void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 lv_demo_mainactivity = (ListView)findViewById(R.id.lv_demo_mainactivity); 8 lv_demo_mainactivity.setAdapter(new MyBaseAdapter(this)); 9 } 13 }
3.MyBaseAdapter类,我个人觉得虽然有SimpleAdapter等等,但是最强大的还是重写BaseAdapter了.
1 public class MyBaseAdapter extends BaseAdapter { 2 Context context; 3 public MyBaseAdapter(Context context) { 4 super(); 5 this.context = context; 6 } 7 8 public int getCount() { 9 // TODO 这个方法是返回ListView一共有多少条目.一般会传进一个集合来.返回的是集合的size()
10 return 10; 11 } 12 13 public Object getItem(int position) { 14 // TODO Auto-generated method stub 15 return position; 16 } 17 18 public long getItemId(int position) { 19 // TODO Auto-generated method stub 20 return position; 21 } 22 23 public View getView(int position, View convertView, ViewGroup parent) { 24 // TODO Auto-generated method stub 25 ViewHolder holder = null; 26 View view = null; 27 if(convertView == null){ 28 view = View.inflate(context, R.layout.item, null); 29 holder = new ViewHolder(); 30 holder.tv_demo_item = (TextView) view.findViewById(R.id.tv_demo_item); 31 view.setTag(view); //setTag()给view设置一个附加值.
32 }else{ 33 view = convertView; 34 holder = (ViewHolder) view.getTag(); 35 } 36 holder.tv_demo_item.setText("我是测试代码哦"); 37 return view; 38 } 39 private class ViewHolder { 40 TextView tv_demo_item; 41 } 42 43 }
关于ConvertView:
convertView是一个刚刚被回收(从界面移除)的view对象,如果可能,我们应该判断下他是否为空并且类型是否合适.如果满足条件就可以复用convertView
如果convertView等于空的时候才创建一个新的convertView,否则就复用convertView.
优化findViewbyId
如果每创建一个条目都findViewByid一下也是很浪费资源的.所以定义一个viewHolder对象(自定义名称)
通过setTag()方法把holder自身的地址值传给view(不知道这样说对不对),如果view被复用的话,viewHOlder也不用再创建了,只要通过getTage()
就可以再次得到地址.
4.Item布局文件很简单的一个TextView
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 android:layout_width="match_parent" 3 android:layout_height="match_parent" 4 android:orientation="vertical" > 5 <TextView 6 android:id="@+id/tv_demo_item" 8 android:layout_width="fill_parent" 9 android:layout_height="wrap_content" 10 android:textSize="25sp" 11 /> 12 13 </LinearLayout>
浙公网安备 33010602011771号