您的位置:首页 > 产品设计 > UI/UE

Android高级UI-listView的原理及优化

2016-05-11 22:44 411 查看
listView的原理及优化 ★

原理:

1、先去执行 getcount 获取总条目个数

2、计算一屏显示的条目个数,执行 对应 次数的 getView

3、每次手指滑动listview,根据计算,执行对应次数的getView

结论:getCount =100,将会执行100次getView

 

优化:

 

1、创建ViewHolder 类

class ViewHolder{

控件类 控件名;

}

 

2、getView中写代码

 

View view=null;

ViewHolder holder=null;

if(convertView==null){

创建布局

view=View.inflate();

创建holder对象

holder=new ViewHolder();

找控件

holder.控件名=view.findViewById();

将holder保存到view对象

view.setTag(holder);

 

}else{

view=convertView;

holder = view.getTag();

}

 

 

holder.控件名.setText();

 

.xml就是一个ListView控件

  <ListView

        android:id="@+id/lv"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

         />

.java

public class MainActivity extends ActionBarActivity {

 

    private List<String> list;

 

@Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        ListView lv = (ListView) findViewById(R.id.lv);

        initData();

        

        lv.setAdapter(new BaseAdapter() {

@Override

public View getView(int position, View convertView, ViewGroup parent) {

//优化1:先去判断有没有可以再利用的view对象,如果有,直接拿来用;如果没有,则重新创建

Viewholder holder=null;

View view=null;

if(convertView==null){

//没有可用的对象

//核心语句1: 创建布局对象——  每个条目都是一样

view=View.inflate(MainActivity.this, android.R.layout.simple_expandable_list_item_1, null);

System.out.println("getView....新用"+position);

//核心语句2:找  布局对象中各个控件——每个条目都是一样

 holder=new Viewholder();

holder.text1 = (TextView) view.findViewById(android.R.id.text1);

//将holder存到view上

view.setTag(holder);

}else{

view=convertView;

System.out.println("convertView....复用"+convertView);

holder=(Viewholder) view.getTag();

}

//核心语句3:为每个控件设置数据——每个条目不一样的!!!

holder.text1.setText(list.get(position));

return view;

}

@Override

public long getItemId(int arg0) {

// TODO Auto-generated method stub

return arg0;

}

@Override

public Object getItem(int arg0) {

// TODO Auto-generated method stub

return list.get(arg0);

}

@Override

public int getCount() {

// TODO Auto-generated method stub

return list.size();

}

});

    }

class Viewholder{

TextView text1;

}

 

private void initData() {

list = new ArrayList<String>();

// TODO Auto-generated method stub

for (int i = 0; i < 100; i++) {

list.add("哈哈,是我"+i);

}

}

 

}

然后在当滑动手机中的list集合时候,在log Cat中会有相应的输出,就是手机刚开始打印的都是新用,你在下拉的时候都是复用

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  listview 优化