java.lang.Object↳ android.view.View↳ android.view.ViewGroup↳ android.widget.AdapterView↳ android.widget.AbsListView↳ android.widget.ListView
①.在页面显示数据;②.处理用户的点击等操作。
- ListView:用来展示列表的View;[V]View
- 适配器: 用来把数据映射到ListView上的中介;[C]Controler
- 数据源(Data): 具体的将被映射的字符串,图片等。[M]Mode
(五)、ListView的常用UI属性:ArrayAdapter最为简单,只能展示一行文本;SimpleAdapter有最好的扩充性,可以自定义各种各样的布局,除了文本外,还可以放ImageView(图片)、Button(按钮)、CheckBox(复选框)等组件;
二、BaseAdapter介绍android:divider 分割线(颜色/图片)
android:dividerHeight 分割线高度
android:entries="@array/myarr" 指定一个字符串数组
adapter是view和数据的桥梁。在一个ListView或者GridView中,你不可能手动给每一个格子都新建一个view,所以这时候就需要Adapter的帮忙,它会帮你自动绘制view并且填充数据BaseAdapter是ArrayAdapter和SimpleAdapter的父类抽象类1.基本使用:必须重写的四个方法
public class MyAdapter extends BaseAdapter { @Override public int getCount() { return 0; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { return null; } }
@Override public int getCount() { return games.size(); } @Override public Object getItem(int position) { return games.get(position); } @Override public long getItemId(int position) { return position; }
- getCount() :获取条目数量
- getItem(int position): 获取pposition位置条目的对象
- getItemId(int position): 获取position位置条目的id
- getView(int position,View convertView, ViewGroup parent): 获取position位置条目的视图,重写方法中最重要的方法
2.LayoutInflater布局加载器://第一步 要将 res/layout/布局文件 item_layout.xml转换成为一个View对象 才能够作为返回值返回 //LayoutInflater 布局加载器! 作用: 将布局文件转换成为Java的View对象 //实例化布局加载器的方法: 参数 上下文对象 LayoutInflater inflater = LayoutInflater.from(context); /*使用 布局加载器进行对象转化 参数一 表示的 是 布局对象的id 参数二 表示的是 父布局 参数三 表示的是 是否获取父布局的属性值 false */ View view = inflater.inflate(R.layout.item_layout, parent, false); //获取这个条目应该显示的数据 //获取条目布局中展示 游戏名字的视图 TextView nameTV = (TextView) view.findViewById(R.id.gameName_tv);
3、ListView优化:/**
* ListView优化:
*
* 1.ListView的高度必须是固定值! match_parent 或者 多少dp
* 2.使用convertView 重用视图
* 3.使用ViewHolder视图持有者减少findvIewById的过程
* 4.避免滑动的时候加载图片
* 5.减少在getView方法中做耗时操作逻辑复杂的操作
*
* @param position
* @param convertView
* @param parent
* @return
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//1.创建视图持有者引用
ViewHolder holder = null;
//2.判断可重用的视图是否是空的
if (convertView == null) {
//是空的则去初始化条目布局
convertView = mInflater.inflate(R.layout.item_layout,parent,false);
//创建 视图是持有者对象
holder = new ViewHolder();
//给视图持有者对象里面的 视图赋值
holder.subjectTv = (TextView) convertView.findViewById(R.id.subject_tv);
holder.summaryTv = (TextView) convertView.findViewById(R.id.summary_tv);
//将 条目布局视图和 视图持有者关联起来
convertView.setTag(holder);
} else {
//如果条目视图不是空的 则直接获取 其视图持有者对象
holder = (ViewHolder) convertView.getTag();
}
NewsEntity.ParamzBean.FeedsBean.DataBean data = list.get(position).getData();
//视图绑定数据
holder.subjectTv.setText(data.getSubject());
holder.summaryTv.setText(data.getSummary());
return convertView;
}
//内部类 视图持有者 推荐使用 static修饰 内部类持有外部引用 /
static class ViewHolder {
TextView subjectTv;
TextView summaryTv;
}