码迷,mamicode.com
首页 > 其他好文 > 详细

listview的工作机制

时间:2016-04-21 15:11:08      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

  listView在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得到listView的长度,然后根据这个长度,调用getView()逐一绘制每一行。

 系统显示列表时,首先实例化一个适配器(这里将实例化自定义的适配器)。当手动完成适配时,必须手动映射数据,这需要重写getView()方法。系统在绘制列表的每一行的时候将调用此方法。getView()有三个参数,position表示将显示的是第几行,covertView是从布局文件中inflate来的布局。我们用LayoutInflater的方法将定义好的item.xml文件提取成View实例用来显示。然后将xml文件中的各个组件实例化(简单的view.findViewById()方法)。这样便可以将数据对应到各个组件上了。但是为了响应点击事件,需要为它添加点击监听器,这样就能捕获点击事件。系统要绘制ListView了,他首先获得要绘制的这个列表的长度,然后开始绘制第一行,怎么绘制呢?调用getView()函数。在这个函数里面首先获得一个View(实际上是一个ViewGroup),然后再实例并设置各个组件,显示之。好了,绘制完这一行了。那再绘制下一行,直到绘完为止。

 

    Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。在常见的View(ListView,GridView)等地方都需要用到Adapter。

例子:

//上下文,自定义的listview元素项布局,listview对应的list

MineTravelAdapter mineTravelAdapter = new MineTravelAdapter(MineActivity.this, R.layout.mine_travel_item, mineTravel);

listView.setAdapter(mineTravelAdapter);

 

private class MineMoodAdapter extends ArrayAdapter<MineMoodItem> {

private int resourceId;

public MineMoodAdapter(Context context, int resource,List<MineMoodItem> objects) {
super(context, resource, objects);
resourceId = resource;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
MineMoodItem mineMood = getItem(position);// 获取当前项的MineMood实例

View view = LayoutInflater.from(getContext()).inflate(resourceId,null);  //获得listview的子项布局

// 获取子项布局里面的文本控件
TextView mineMoodTime = (TextView) view.findViewById(R.id.time);  //注意是view.findViewById();
TextView mineMoodSpotname = (TextView) view.findViewById(R.id.spotname);

// 填充数据
mineMoodTime.setText(mineMood.getTime());
mineMoodSpotname.setText(mineMood.getSpotName());
return view;
}

}

listview的工作机制

标签:

原文地址:http://www.cnblogs.com/new-comer/p/5416913.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!