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>


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2012-12-20 16:59  androidfan  阅读(127)  评论(0)    收藏  举报