listview的工做机制

  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。ide

例子:函数

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

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

listView.setAdapter(mineTravelAdapter);xml

 

private class MineMoodAdapter extends ArrayAdapter<MineMoodItem> {接口

private int resourceId;事件

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

@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;
}

}

相关文章
相关标签/搜索